1

との2つのエンティティがあるUserとしUserGroupます。
それらには1対多の関係があります=>それぞれがUserGroup事実上0からnの数のユーザーを含みます。

UserGroupビジネスレイヤー のどこのユーザーを取得したい場合は、そのメソッドを配置するのに適したクラスになりますか?

  1. UserManager、メソッドを追加します。GetAllUsersForUserGroup
  2. 上記のメソッドをUserGroupManager追加します。

2が良いと思います。確信はないけど。
ありがとう。

更新
私が意味することを完全に説明することができなかったと思います。はい、、、、などを
使用できます。 UserUsersGroupGroups

しかし、私はビジネスを実装するためにどのような異なるパターンなどを適用できるかを見つけようとはしていません。私の質問は:あなたは入れますか、GetAllUsersForUserGroup(int UserGroupID)それとも入れますか?ユーザーを管理しているクラスで定義する必要があると思いますか、それともユーザーグループを管理しているクラスで定義する必要がありますか?UserManagerGroupManagerGetAllUsersForUserGroup(int UserGroupID)

4

5 に答える 5

3

もちろん、マネージャーとマネージャーのクライアントがどのように構成されているか、そして彼らがすでにどのような方法を提供しているかを正確に知らずに意見を述べることは困難です。

マネージャーが基本的なエンティティ操作用のCRUD操作を備えた単純なDAOであると仮定すると、より高いレベルのUserRepositoryまたはUserServiceオブジェクトを使用して、

IList<User> FindUsersByGroup( UserGroup group );

要約すると、どちらの方法でも論理的に議論できるほど正しい答えはありません-私は、マネージャーをできるだけシンプルに保ち、オブジェクトの肥大化を避け、アプリケーションが近い将来にどのように進化するかを監視することに基づいて決定します。必要に応じてリファクタリングすると、保守性が問題になります。

于 2011-06-08T07:51:30.283 に答える
2

ファクトリパターンを使用することもできます。

例えば:

public class UserFactory
{
 public static List<User> GetUsers()
 {
 }

 //Optional method to get users in group from user factory
 public static List<User> GetUsersInGroup(int GroupID)
 {
  return UserGroupFactory.GetUsersInGroup(int GroupID)
 }
}

public class UserGroupFactory
{
 public static List<UserGroup> GetUserGroups()
 {
 }

 public static List<User> GetUsersInGroup(int GroupID)
 {
 }
}

ユーザーグループテーブルにユーザーとグループIDが含まれている場合は、それをUserGroupファクトリに配置します。

于 2011-06-08T08:02:27.590 に答える
2

@Tom Carterが言ったように、多くの詳細が欠落しているため、あなたにとって最良の答えを正確に見つけるのは難しいです。ほとんどの「マネージャー」クラスは、実際には優れたOOPを使用して削除できると思います。

UserGroupクラスは、次のようになります。

public class UserGroup
{
    private List<User> _Users;

    public ReadOnlyCollection Users
    {
        get { return _Users.AsReadOnly (); }
    }

    public void AddUser (User User)
    {
        // Perform your business logic here inside the object itself
        _Users.Add (User);
    }

    public UserGroup ()
        : this (null)
    { }

    public UserGroup (List<User> Users)
    {
        _Users = Users ?? new List<Users> ();
    }
}

これにより、リッチオブジェクトを構築し、オブジェクト内のビジネスロジックを維持し、一連の「マネージャー」クラスの作成に頼る必要がなくなります。

于 2011-06-08T08:04:12.163 に答える
1

ユーザーを管理しているクラスで定義する必要があると思いGetAllUsersForUserGroup(int UserGroupID)ますか、それともユーザーグループを管理しているクラスで定義する必要がありますか?

このメソッドはUserManager/UserRepositoryクラスで定義する必要があります。

  1. Manager/Repositoryクラスは通常、クラスなどの具象クラスのオブジェクトを操作するための一連の同様のメソッドを持つように設計されていますUser

  2. これらのメソッドには、特定の仕様により、クラスの1つ以上のオブジェクトを作成/要求/データベース/キャッシュ/ローカルコレクションから取得するメソッドが含まれます。

  3. 仕様Get Usersによる方法は、その方法の1つです。UserGroup

すべてのユーザーがグループ内に格納されている場合の最も単純な実装:

class UserRepository
    function GetUsers(Group as UserGroup) as IEnumerable(of User)
        return Group.Users
    end function
end class

または、すべてのユーザーが1つのコレクション内に保存されている場合:

class UserRepository
    private readonly UserCollection as ICollection(of User)

    public function GetUsers(Group as UserGroup) as IEnumerable(of User)
        return UserCollection.Where(function(U) U.Group.ID = Group.ID)
    end function
end class
于 2015-09-03T14:47:38.733 に答える
0

ユーザーのリストを取得する場合、メソッドをUsersクラスに配置するので、次のように自然に読み取られます。

Users.GetAllByUserGroup()
于 2011-06-08T07:54:55.440 に答える