1

私は、LLBLGen がデータベース構造に基づいてオブジェクトを生成するときに提供するレイアウトに慣れています。これにより、データベース内の特定の「ユーザー」テーブルに対して次のクラス ファイルが生成される可能性があります。

/EntityClasses/UserEntity.vb
/CollectionClasses/UserCollection.vb

これにより、データ アクセスの基本機能が提供されます。しかし、その上にビジネスロジックを実装したい場合、どのようにレイアウトしますか? たとえば、次のようなテーブル構造があるとします。

 USER
 userId
 firstName
 lastName
 username
 password
 lockedOut

ユーザーをロックアウトしたい場合はどうしますか? プレゼンテーション層からどのコードを呼び出しますか? UserEntity クラスをインスタンス化して、次のことを行いますか?

 User = new UserEntity(userId)
 User.lockedOut = true
 User.Save()

または、UserHelper (/BusinessLogic/UserHelper.cs) などの新しいクラスを作成します。これには、LockOutUser 関数が含まれている可能性があります。これにより、コードは次のように変更されます。

 UH = new UserHelper()
 UH.LockOutUser(userId)

それとも、基本の UserEntity クラスを拡張し、新しい機能を追加する UserEntityExt を作成しますか? したがって、プレゼンテーション層のコードは次のようになります。

 User = new UserEntityExt(userId)
 User.LockOutUser()

それとも…まったく別のことをしますか?

また、ディレクトリ/名前空間の構造とファイル/クラスの命名規則はどうなりますか?

4

1 に答える 1

1

あなたが探しているのは、ドメイン オブジェクトの上にあるサービス レイヤーだと思います。UserService または UserTasks と呼ぶかもしれませんが、基本的には 2 番目のオプションでこれを使用します。この LockUser プロセスを 1 つの場所にカプセル化することで、後でより多くの手順やその他のドメイン オブジェクトが関係する可能性がある場合に、簡単に変更できます。また、これは、複数のデータベース呼び出しを処理するときにトランザクションを実装する場所になります。

于 2008-09-22T21:39:29.823 に答える