何处放置两个相关对象的业务逻辑?
假设我有两个实体:User
和UserGroup
。
他们有一个一对多的关系=>每个UserGroup
实际上包含0到n个用户。何处放置两个相关对象的业务逻辑?
如果我想检索UserGroup
的用户,那么在我的业务层中放置该方法会更好?
- 在
UserManager
,添加方法:GetAllUsersForUserGroup
- 在
UserGroupManager
添加上述方法。
猜测2更好。但我不确定。
谢谢。
UPDATE
猜测我无法完全解释我的意思。
是的,我们可以有User
,Users
,Group
,Groups
等
但我不是要找出什么不同的图案等可以应用到实现业务。我的问题是:你把GetAllUsersForUserGroup(int UserGroupID)
在UserManager
或GroupManager
?你认为GetAllUsersForUserGroup(int UserGroupID)
应该在管理用户的班级还是在管理用户组的班级中定义?
回答:
当然,如果不确切了解管理人员和管理人员的结构以及他们已经提供了哪些方法,很难给出意见。
假设管理者与CRUD操作简单的DAO,因为我会去想具有较高水平UserRepository或UserService对象提供更多的“生意”一样的功能,如
IList<User> FindUsersByGroup(UserGroup group);
基本实体操作总而言之,没有正确的答案,因为在逻辑上你可能会以任何方式争论 - 我会根据我的决定让管理者尽可能简单,避免对象膨胀,注意你在不久的将来会如何看待应用程序的发展,必要时重构它的可维护性成为一个问题。
回答:
如果让用户的名单,我会放在用户类中的方法,所以它自然读取,如:
Users.GetAllByUserGroup()
回答:
你也可以使用一个工厂模式。
如:
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我把把它的用户组工厂。
回答:
正如@Tom Carter所说的,很难找出你的最佳答案,因为缺少很多细节。我认为,大多数“经理”类实际上可以使用良好的OOP删除。
你的用户组类可以再这个样子:
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>();
}
}
这有助于建立一个丰富的对象,并保持你的对象内的业务逻辑,并让您无需求助于创造了一堆“经理“班。
回答:
您认为
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
以上是 何处放置两个相关对象的业务逻辑? 的全部内容, 来源链接: utcz.com/qa/265063.html