上一次(即昨天),我們完成了業務邏輯層的演示;傳送門:專案架構開發:業務邏輯層之領域驅動失血模型
設計上雖然還不是太優雅,但是距離真正的oo程式設計又更近了一步,而且也保留了事務指令碼模式的簡單快捷的特性
只要後續把model層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有點期待了。。
本章我們來完成在業務邏輯層之上的服務層;
服務層並不是必須的,在有一定複雜度的應用程式中,服務層非常有必要建立;而與之相反的就是,
在一些業務邏輯簡單的系統中,服務層可能僅僅充當分發功能,沒有多餘的工作需要組織,這時服務層就顯得多餘;
而且,服務層一般還與客戶端有關係(web、winform);如果是web,在同一系統內,服務層就沒有大多必要,除非是跨系統的服務呼叫;
如果是winform,那服務層就比較常用,因為winform是c/s模式,物理層上天生與伺服器端分離。
若是從c端遠端呼叫應用邏輯,那有可能在長距離的遠端呼叫中花費太多的時間,而加入服務層情況就會不同
服務層就是為ui何應用邏輯層之間提供乙個資料互動的契約,簡單點說就是從c端傳送一組引數,在s端進行邏輯運算,
因為一般情況下s端與資料庫在同一區域網下,訪問速度比前者快很多,效率也大大提高
若沒有服務層,則需要從ui直接與後端應用程式通訊,互動次數大大的增加,通訊距離也大大的影響程式效能
我們開始吧。
17這裡新增了2個方法,功能不解釋了
現在,我們假設ui層與應用層相距甚遠,那直接呼叫顯然是不妥的,我們建立乙個服務專案來完成這個功能
iuserservice.cs
1userservice.svc[servicecontract]
2public
inte***ce
iuserservice310
11[datacontract]
12public
class
userlist
1316 }
1也很簡單明瞭,在add方法中我們完成以後的校驗與新增public
class
userservice : iuserservice210
1112
return
true;13
}1415public
userlist getall()
1623 }
這個類是系統自動生成的,不用我們自己寫
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層豐富起來,那就算是掌握了另一種軟體開發模式,而且也是整個思想上的轉變。都有...