两个对象重叠的模式

时间:2008-09-09 17:22:32

标签: object design-patterns intersection

我确信这已经被问到并回答了所以我提前为此道歉但我没有找出正确的搜索关键字。搜索“模式”的方式太多了Q& A是有用的。

我正在开发一个回归测试应用。我正在屏幕上显示一个表单,根据哪个用户登录到应用程序,某些字段应该是只读的。所以我可以抽象一个字段对象,我可以抽象一个用户对象,但是我应该用什么模式来描述这两个概念的交集呢?换句话说,我应该如何描述字段1和用户A,字段应该是只读的?看起来像只读(或不是)应该是Field类的属性,但正如我所说,它取决于哪个用户正在查看表单。我考虑过一个简单的二维数组(例如,ReadOnly [Field,User] = True),但我想确保我选择了最有效的结构来表示这一点。

是否有关于此类数据结构的软件设计模式?我是不是太复杂了 - 二维数组是最好的方式吗?正如我所说,如果有人问过并回答,我会道歉。我在这里搜索过并没有找到任何内容,谷歌搜索也未能找到任何内容。

2 个答案:

答案 0 :(得分:2)

表驱动设计可能很有效。 史蒂夫马奎尔在 Solid 代码中没有很好的例子。

它们也是捕获测试的好方法,请参阅fit

在你的情况下:

Field1ReadonlyRules = {
    'user class 1' : True,
    'user class 2' : False
}

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

另外,您可能希望对用户和用户类/角色/组进行建模,而不是将它们组合在一起。 用户通常会捕获(身份验证),而组/角色捕获内容(权限,功能)

答案 1 :(得分:1)

乍一看,听起来更像是你有两种不同类型的用户,他们有不同的访问级别。这可以通过继承(PowerUser,User)或通过包含为用户设置级别的安全对象或令牌来解决。

如果您不喜欢继承作为规则,您可以在应用程序上使用State模式,装饰用户对象(Shudder)或者可能为不同的安全级别添加策略模式。但我认为现在还有点早,我通常不会应用模式,直到我对项目的成长和维护方式有了明确的认识。