我正在确定设计方法。我想要你的意见
我有两种类型的用户
技术上它们之间的根本区别是
我有一个表User,它有像这样的列
User Name
Password
Roles
Customer ID
如果我使用抽象工厂模式抽象用户创建过程,我会得到两种类型的用户对象。
现在,在创建存储库时,我该如何处理它?我是否创建了2个不同的存储库来处理单个用户类型对象(映射到同一个表)
答案 0 :(得分:1)
您应该考虑在用户表中添加用户类型列。这样,您可以跟踪每条记录所代表的用户类型。在存储库层中的查找/获取操作上创建用户实体时以及执行添加或更新过程时,这将非常有用。我建议只有一个“用户”存储库。如果使用继承并在数据库级别跟踪用户类型,则不需要两个存储库类。
希望这有帮助。
享受!
答案 1 :(得分:1)
企业用户也可以成为客户吗?如果是这样,你会期望他们使用相同的ID吗?如果是这样,您可能希望查看实现Party-Role模式(也称为Actor-Participant)。
它将为您提供统一的解决方案,以处理内部用户角色以及公司与客户的区别。
第h
答案 2 :(得分:1)
也许我可以给你一些提示。我同意Doug的看法,你应该只使用一个管理User Aggregate类的UserRepository。
我就是这样做的(流利的)Nhibernate:
具有映射到单个列的UserType Enumeration字段的用户类。看到这篇文章,非常好,我已经多次使用过Jimmy Bogard的解决方案(http://lostechies.com/jimmybogard/2008/08/12/enumeration-classes/)。然后你有一个UserType类实际上只是将数据库表示为User表中的一列,但是你有一个带有Behavior等的完整类。
然后,为了解决每种类型应如何处理密码和客户关系的差异,您可以使用验证程序模式确认您的用户实例是有效的(基于您的UserType),然后再将其保存到db。看看这个博客http://lostechies.com/jimmybogard/2007/10/24/entity-validation-with-visitors-and-extension-methods/(吉米再次......我是否需要说你应该订阅Jimmy Bogard的博客:))。
然后你有一个UserPersistanceValidator来检查UserType是否是内部的,不需要pwd,必须提供AD角色。你得到了照片......
我希望这会对你有所帮助。祝你好运!