好的。所以這是我的簡化方案。我們有一個處理大量客戶訂單的系統。我們希望員工能夠查看所有訂單,並且我們希望客戶用戶只能查看與其相關的訂單。如何防止重複業務邏輯?
在試圖查看特定的記錄,我們使我們的OrderSecurity類使用以下功能:
Public Function CanViewOrder(order)
If currentUser.MemberOfStaff() Then
CanViewOrder = True
Else
CanViewOrder = (order.ClientId = currentUser.ClientId)
End If
End Function
在點的時候,我們希望顯示訂單的列表,我們可以下面的函數定義的用戶在一個OrderService類中
Public Function GetOrders()
If currentUser.MemberOfStaff() Then
GetOrders = GetAllOrders()
Else
GetOrders = GetAllOrdersForClient(currentUser.ClientId)
End If
End Function
這對上述情況沒問題,但由於規則變得更復雜,比如說,我們添加另一個用戶類型,它代表了一個不太可信的員工,他只能查看來自客戶子集的訂單。然後,我們不得不邏輯添加到CanViewOrder和GetOrders功能(和潛在的數據訪問類),它在我的腦海違反DRY原則。
所以,我的問題是:我在這裏缺少一個竅門 - 是有一些方法我可以結合業務邏輯進行許可,其中這兩個功能可以使用一個地方查看訂單?
還是我擔心太多,應該控制一下,並有邏輯在兩個地方?
(在這個特定的應用程序,我正在使用ASP經典 - 不恨球員,討厭遊戲 - 但你是如何解決在任何語言中這個問題我很感興趣)