[英]Call Business Layer method
我是多層架構和asp.net mvc的新手。 我想知道調用業務層方法的好習慣。
1)從控制器調用業務層方法,填充視圖模型並將視圖模型傳遞給視圖。
2)直接從視圖中調用業務層方法。
請讓我知道這兩種方法的優缺點。 如果解釋“在哪種情況下使用任何一種方法”,將不勝感激
這是一個尋求意見的問題,但我認為值得一個解釋,盡管你可以通過足夠的研究找到它。
選項1是要走的路,可能會達到+ 80%的同意。
再過一次,你會遇到'依賴'的答案。 這取決於你需要多少才能解決問題。 在學術上你應該松散地加上高凝聚力。 一切都很好,但在現實世界中很少有絕對的,因為完美的建築更多的是“及時”設計而不是學術,否則你永遠不會把東西投入生產。 所以你作為開發者必須判斷你妥協的地方(你會)。
所以這里有基於意見的地方:
a)具有高內聚力的松散耦合意味着更好的可測試性/可維護性/可擴展性,代價是更大的抽象,即更多的開發時間。
b)相反意味着減少所有商品,但前期開發時間也減少了,也就是說“只是把它拿出來,停止告訴我(你的老板)關於好建築的死訊!”
一個優秀的開發人員總是在努力爭取a)。 問題是我們大多數人必須在取得進展的同時保持平衡,因此我們傾向於向b)(不情願)
因此,為了進一步討論(如果你還在閱讀)... a)的一個例子,還有很多其他的權利,這只是一種風格:
您的視圖模型假設包含呈現flavor的UI所需的所有內容,直接從UI調用的view +函數所需的最少數據。 它不應代表與域模型相關的業務邏輯。 域模型應該代表必要的數據,以代表它們所包含的域。 業務邏輯層(在此處稱為服務層)應該是在域上運行的功能。
澤的例子:
假設我們有一個擁有多個帳戶的用戶。 會有一個User類和Account類。 它們組合在UserAccounts類(User屬性和Accounts屬性(數組))中。
根據您決定使用域的方式,可以使用UserService類或UserService + AccountService + UserAccountService類組合。
然后讓我們假設您有用戶(UserView類)和用戶詳細信息(UserDetailView類)視圖。 UserView是User類+帳戶的聚合表示(但不是所有細節)+ UI直接調用函數。 UserDetailView表示每個帳戶的用戶+詳細信息+ UI直接調用功能。
用戶控制器有兩個功能(更多肯定,但只是這些解釋),getUsers和getUserDetail。
使用MVC,您的處理(如調用和填充模型)將屬於模型本身。 控制器需要盡可能“愚蠢”,基本上只是說“好吧我需要這個模型並將其發送到那個視圖”
這是我的一個模型的VB.NET版本(我使用自定義版本的StackOverflow的Dapper ORM作為我的數據庫層。這是一個未完成的模型順便說一句,用戶信息的總體還沒有包含在其中):
Public Class UserAccount
Public Property Employee_ID() As Integer
Public Property Email_Address() As String
Public Property Location_ID() As String
Public Property Department_ID() As String
Public Property Company_ID() As String
Public Property Password_Expiry() As DateTime
Public Property Win_User_Name() As String
Public Property First_Name() As String
Public Property Last_Name() As String
Public Property Message_Number() As Integer
Public Property Message_Text() As String
Public Property Password() As String
Public Overrides Function ToString() As String
Dim serializer As JavaScriptSerializer = New JavaScriptSerializer
Dim result As String = serializer.Serialize(Me)
Return result
End Function
Public Function FromString(str As String) As UserAccount
Dim serializer As JavaScriptSerializer = New JavaScriptSerializer
Return serializer.Deserialize(Of UserAccount)(str)
End Function
Public Function GetUserInfo() As UserAccount 'Returns user info as a strongly typed object from what is saved in the cookie
Dim user As UserAccount
Dim cookie As HttpCookie = DirectCast(System.Web.HttpContext.Current.Request.Cookies(FormsAuthentication.FormsCookieName), HttpCookie)
Dim ticket As FormsAuthenticationTicket = FormsAuthentication.Decrypt(cookie.Value)
user = Me.FromString(ticket.UserData)
Return user
End Function
Public Shared Function Encrypt(password As String, Win_User_Name As String)
Dim _password As New StringBuilder
Try
'encryption stuff happens here
Catch er As Exception
Return ""
End Try
Return _password.ToString
End Function
End Class
現在,控制器需要做的就是實例化該模型並將數據提供給視圖
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.