わかった。これが私の単純化されたシナリオです。多数のお客様のご注文に対応できる体制を整えております。スタッフ ユーザーはすべての注文を表示できるようにし、クライアント ユーザーは関連する注文のみを表示できるようにします。
特定のレコードを表示しようとするとき、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 原則に違反しています。
ですから、私の質問は次のとおりです。ここでトリックがありませんか?ビジネスロジックを組み合わせて、これらの機能の両方が使用できる 1 つの場所で注文を表示する許可を得る方法はありますか?
それとも、心配しすぎて、2 か所でロジックを実行する必要がありますか?
(この特定のアプリケーションでは、私は ASP Classic を使用しています - プレイヤーが嫌いではなく、ゲームが嫌いです - しかし、どの言語でもこの問題をどのように解決するかに興味があります)