假设我有两个实体:User
和UserGroup
他们有一对多的关系=>每个UserGroup
实际上包含0到n个用户。
如果我想检索UserGroup
的用户,那么在我的业务层中放置该方法会更好?
UserManager
中,添加方法:GetAllUsersForUserGroup
UserGroupManager
中添加上述方法。猜猜2更好。但我不确定 感谢。
更新
猜猜我无法完全解释我的意思
是的,我们可以User
,Users
,Group
,Groups
等。
但我并不想知道可以应用哪些不同的模式等来实现业务。我的问题是:您是否将GetAllUsersForUserGroup(int UserGroupID)
放入UserManager
或GroupManager
?您认为应该在管理用户的类中或在管理用户组的类中定义GetAllUsersForUserGroup(int UserGroupID)
吗?
答案 0 :(得分:3)
当然,如果不确切了解经理的管理者和客户是如何构建的,以及他们已经提供了哪些方法,那么很难发表意见。
假设管理器是基本实体操作的CRUD操作的简单DAO,我会考虑让更高级别的UserRepository或UserService对象提供更多“业务”功能,例如
IList<User> FindUsersByGroup( UserGroup group );
总而言之,没有正确答案,因为逻辑上你可以争论任何一种方式 - 我的决定是让管理者尽可能简单,避免对象膨胀,留意你如何看待应用程序在不久的将来,重构如果有必要,它的可维护性就成了一个问题。
答案 1 :(得分: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工厂中。
答案 2 :(得分: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”类。
答案 3 :(得分:1)
您认为应该在管理用户的类中或在管理用户组的类中定义
GetAllUsersForUserGroup(int UserGroupID)
吗?
此方法应在UserManager
/ UserRepository
类中定义。
Manager
/ Repository
类通常设计为具有一组类似的方法来处理具体类的对象,例如User
类。
这些方法包括通过某种规范从数据库/缓存/本地集合创建/请求/检索类的一个或多个对象的方法。
按Get
规范Users
UserGroup
的方法是其中一种方法。
如果所有用户都存储在组中,则最简单的实现:
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
答案 4 :(得分:0)
如果您获取用户列表,我会将该方法放在Users类中,因此它会自然地读取,如:
Users.GetAllByUserGroup()