專案架構開發 服務層

2021-07-28 09:07:26 字數 3229 閱讀 5755

上一次(即昨天),我們完成了業務邏輯層的演示;傳送門:專案架構開發:業務邏輯層之領域驅動失血模型

設計上雖然還不是太優雅,但是距離真正的oo程式設計又更近了一步,而且也保留了事務指令碼模式的簡單快捷的特性

只要後續把model層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有點期待了。。

本章我們來完成在業務邏輯層之上的服務層;

服務層並不是必須的,在有一定複雜度的應用程式中,服務層非常有必要建立;而與之相反的就是,

在一些業務邏輯簡單的系統中,服務層可能僅僅充當分發功能,沒有多餘的工作需要組織,這時服務層就顯得多餘;

而且,服務層一般還與客戶端有關係(web、winform);如果是web,在同一系統內,服務層就沒有大多必要,除非是跨系統的服務呼叫;

如果是winform,那服務層就比較常用,因為winform是c/s模式,物理層上天生與伺服器端分離。

若是從c端遠端呼叫應用邏輯,那有可能在長距離的遠端呼叫中花費太多的時間,而加入服務層情況就會不同

服務層就是為ui何應用邏輯層之間提供乙個資料互動的契約,簡單點說就是從c端傳送一組引數,在s端進行邏輯運算,

因為一般情況下s端與資料庫在同一區域網下,訪問速度比前者快很多,效率也大大提高

若沒有服務層,則需要從ui直接與後端應用程式通訊,互動次數大大的增加,通訊距離也大大的影響程式效能

我們開始吧。

17這裡新增了2個方法,功能不解釋了

現在,我們假設ui層與應用層相距甚遠,那直接呼叫顯然是不妥的,我們建立乙個服務專案來完成這個功能

iuserservice.cs

1

[servicecontract]

2public

inte***ce

iuserservice310

11[datacontract]

12public

class

userlist

1316 }

userservice.svc

1

public

class

userservice : iuserservice210

1112

return

true;13

}1415public

userlist getall()

1623 }

也很簡單明瞭,在add方法中我們完成以後的校驗與新增

這個類是系統自動生成的,不用我們自己寫

program.cs

1

class

program2;

12userclient.add(addrequest);

13 console.writeline(string.format("

add finish:

", addrequest.loginname));

1415

var result =userclient.getall();

16foreach (var item in

result.items)17"

, item.loginname));20}

2122 console.writeline("

totle:

" +result.items.count());

23console.writeline();

2425

console.readkey();26}

27 }

看看效果

成功了啊

上邊演示的是適合c/s架構,我們再來看看b/s的

16執行看看效果

看來沒什麼問題,成功了

看看完整架構

專案架構開發 服務層

上一次 即昨天 我們完成了業務邏輯層的演示 傳送門 專案架構開發 業務邏輯層之領域驅動失血模型 設計上雖然還不是太優雅,但是距離真正的oo程式設計又更近了一步,而且也保留了事務指令碼模式的簡單快捷的特性 只要後續把model層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有...

專案架構開發 服務層

上一次 即昨天 我們完成了業務邏輯層的演示 傳送門 專案架構開發 業務邏輯層之領域驅動失血模型 設計上雖然還不是太優雅,但是距離真正的oo程式設計又更近了一步,而且也保留了事務指令碼模式的簡單快捷的特性 只要後續把model層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有...

專案架構開發 服務層

上一次 即昨天 我們完成了業務邏輯層的演示 傳送門 專案架構開發 業務邏輯層之領域驅動失血模型 設計上雖然還不是太優雅,但是距離真正的oo程式設計又更近了一步,而且也保留了事務指令碼模式的簡單快捷的特性 只要後續把model層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有...