Algorithm 对于来自不同、冲突、优先级不同的来源的物业,是否存在设计模式?

Algorithm 对于来自不同、冲突、优先级不同的来源的物业,是否存在设计模式?,algorithm,design-patterns,data-structures,dsl,Algorithm,Design Patterns,Data Structures,Dsl,我有一组对象的属性,它们的值大部分是布尔值,但它们来自不同的源,不同的源相互覆盖 例如,为了确定用户是否可以使用功能X,我有以下信息来源: 功能的默认值,如“功能X在默认情况下可用” 用户帐户类型,如“帐户类型为“业务”的用户可以使用功能X” 国家/地区,如“功能X在您的国家/地区不可用” 按用户覆盖,例如,“功能X可用于此用户,因为他很酷” 对于不同的功能,源列表、它们的顺序及其对默认值的影响不同,例如,无法为单个用户覆盖功能Y,国家/地区源具有优先权 也许我太拘泥于当前的实现,如下所示:

我有一组对象的属性,它们的值大部分是布尔值,但它们来自不同的源,不同的源相互覆盖

例如,为了确定用户是否可以使用功能X,我有以下信息来源:

  • 功能的默认值,如“功能X在默认情况下可用”
  • 用户帐户类型,如“帐户类型为“业务”的用户可以使用功能X”
  • 国家/地区,如“功能X在您的国家/地区不可用”
  • 按用户覆盖,例如,“功能X可用于此用户,因为他很酷”
对于不同的功能,源列表、它们的顺序及其对默认值的影响不同,例如,无法为单个用户覆盖功能Y,国家/地区源具有优先权

也许我太拘泥于当前的实现,如下所示:

  • 每个特征由类特征中的常数标识
  • 有一个具有默认值的数组(功能X->默认值不可用)
  • 每个帐户类型都有数组(业务帐户:功能X->可用,功能Y->……)
  • 所有其他源代码都有一个很长很长的函数,包含大量的
    if
    -嵌套
  • 最后有(或可能有)无条件的每用户覆盖
    从user\u功能中选择可用,其中user\u id=1和feature\u id=X
问题是,我该如何正确操作,是否有一种设计模式? 或者我想说得太笼统了,雅格尼就是答案

我所能想到的是:

  • DSL,用于描述来源对财产的影响,表示“此帐户类型可用”和“此国家/地区不可用”
  • 每个已定义属性的源的有序列表
    • 默认值可能只是另一个来源
编辑

也许我的问题是不同属性和来源的数量。也许我需要一个有效的数据结构来保存有关属性、数据源、优先级/源顺序/覆盖的信息,以计算每个属性。

重要性,然后是许可性

首先,给每个来源分配一个重要性。默认值是最不重要的,因为它应该始终被覆盖

现在,当试图确定权限时,从最重要的来源开始,看看它有什么要说的。继续,直到找到一个源,告诉您是否允许该操作,并使用该源

你可能希望有一些同样重要的来源。在这种情况下,请使用“最优先许可”设置。如果两个同等重要的来源不同,一个说你可以,另一个说你不能,那么你可以。(显然,这是假设没有更重要的消息来源说你能或不能,或者你会就此止步。)


我不知道这是否是一种模式,更像是一种算法。

您可能想看看,寻找一种处理复杂规则系统的干净方法


您为规则定义DSL的想法也可能很好,DSL构建的结构是模式中描述的复合规范。

如果有人碰巧理解我的意思,请随时澄清或标记。可能重复的
恰好理解了我的意思
在这里似乎很贴切。你需要某种解析算法。好的相关搜索词应该是:命名服务、目录服务、图形数据库、名称空间解析、环境覆盖、特征、策略模式。(不包括:wailing,youtube,Katz,TIMTOWTDI)好的@Preet,看起来我需要回到Goedel/Escher/Bach的书中去理解这一点。来源的重要性取决于一处房产的性质,我有大约200本。虽然,我可以在属性描述中包含源重要性。。。我得考虑一下。