1

假设我有两个实体:UserUserGroup
它们具有一对多的关系 => 每个UserGroup实际上包含 0 到 n 个用户。

如果我想UserGroup在我的业务层中检索用户的位置将是一个更好的类来放置该方法?

  1. UserManager,添加方法:GetAllUsersForUserGroup
  2. UserGroupManager添加上述方法。

猜猜2更好。但我不确定。
谢谢。

更新
猜猜我无法完全解释我的意思。
是的,我们可以有User, Users, Group,Groups等。

但我并不是想找出可以应用哪些不同的模式等来实现业务。我的问题是:你是投入GetAllUsersForUserGroup(int UserGroupID)还是UserManager投入GroupManager?您认为GetAllUsersForUserGroup(int UserGroupID)应该在管理用户的类中还是在管理用户组的类中定义?

4

5 回答 5

3

当然,如果不确切了解经理和经理的客户的结构以及他们已经提供了哪些方法,就很难发表意见。

假设管理器是简单的 DAO,具有基本实体操作的 CRUD 操作,我会考虑使用更高级别的 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,我把它放在用户组工厂。

于 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> ();
    }
}

这有助于构建丰富的对象并将业务逻辑保留在对象中,并使您不必求助于创建一堆“Manager”类。

于 2011-06-08T08:04:12.163 回答
1

您认为GetAllUsersForUserGroup(int UserGroupID)应该在管理用户的类中还是在管理用户组的类中定义?

这个方法应该定义在一个UserManager/UserRepository类中。

  1. Manager/类Repository通常被设计为具有一组类似的方法来处理具体类的对象,例如User类。

  2. 这些方法包括通过某些规范从数据库/缓存/本地集合中创建/请求/检索类的一个或多个对象的方法。

  3. 指定的方法Get UsersUserGroup其中一种方法。

如果所有用户都存储在组内,最简单的实现:

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

或者如果所有用户都存储在一个集合中:

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.GetAllByUserGroup()
于 2011-06-08T07:54:55.440 回答