我确信这个问题已经被问过并得到回答,所以我提前为此道歉,但我没有弄清楚要搜索的正确关键字。搜索“Pattern”会遇到太多的问答,毫无用处。

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

有没有关于这种数据结构的软件设计模式?我是否让事情变得过于复杂了——二维数组是最好的方法吗?正如我所说,如果有人提出并回答了这个问题,我深表歉意。我在这里搜索过,没有找到任何东西,谷歌搜索也没有找到任何东西。

有帮助吗?

解决方案

表驱动设计可能是有效的。史蒂夫·马奎尔在这方面有几个很好的例子 写作 坚硬的 代码 .

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

在你的情况下类似:

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

field1.readOnly = Field1ReadonlyRules[ someUser.userClass ]

顺便说一句,你可能想要建模 两个都 用户和用户类/角色/组而不是组合它们。用户通常捕获 WHO (身份验证)同时组/角色捕获 什么 (权限、能力)

其他提示

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top