在 [ this post ],我正在努力实现@jonp 建议的状态模式。我不太明白如何使用他发布的内容,但这让我想到也许我正在尝试将方形钉子装入圆孔中。所以我的问题:
如果我的站点访问者可以扮演多个角色,即 User
可以是 Vendor
、Employer
、Advertiser
,或者以上所有,我应该使用继承吗?我已经声明:
class Vendor : User {}
class Advertiser : User {}
等等,但是当用户既是供应商又是雇主时,不同类的实例实际上指向相同的底层对象......我不确定这是否可行。如何建模?
* 更新 *
谢谢大家(你们都得到一分(这是我所能给予的))。在过去的几天里,我一直在使用 EF、向下转换和状态模式进行深度复制。角色方法更有意义。
最佳答案
这听起来像是属性模式(或者我这样调用它)非常适合的情况。这是一种比简单继承更松散耦合的方法,可用于指定多个“行为”或在您的情况下为 User
类型.这真的没有比一个对象具有另一种对象的标签更复杂的了。
实现它的最简单方法是有一个具体的 User
类,具有只读属性 IList<UserRole>
(在内部这可能是一个 List<T>
字段)。你的UserRole
类将是抽象的,并且VendorRole
/AdvertiserRole
/ETC。将从中派生,允许您将任意数量的不同角色(甚至是相同类型的角色)标记到给定用户上。这些角色还可以定义自己的自定义行为、实用方法等。
此外,您可以定义一个 GetRole<TRole>
User
上的方法类以方便访问特定类型的角色(假设每个 User
只有一个特定子类型的 Role
)。
旁注:您也可以考虑 decorator patern ,它与上面提到的模式密切相关——尽管我个人觉得它在这里有点矫枉过正,并且在灵 active 或功能方面确实没有增加任何东西。它通常只是掩盖了您要尝试做的事情;尽管无论如何请随时进行调查。
关于c# - 建模 "I' m a * 但我也是一个 **”,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7395597/