Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/design-patterns/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Design patterns 这个有设计模式吗_Design Patterns - Fatal编程技术网

Design patterns 这个有设计模式吗

Design patterns 这个有设计模式吗,design-patterns,Design Patterns,我有以下领域,一份文件档案: -Dossier(Name,Documents[]) -Document(Name) 现在有一个新的要求,要求一些有主题的档案,每个主题都有文档,因此新的领域如下: -Dossier(Name,Subjects[]) -Subject(Number,Documents[]) -Document(Name) 对于这几个档案(7%),我必须将一个简单的设计更改为一个更复杂的设计。我的问题是:我可以使用一种设计模式或任何想法来支持主题,但避免更改初始域。您只需保留从档

我有以下领域,一份文件档案:

-Dossier(Name,Documents[])
-Document(Name)
现在有一个新的要求,要求一些有主题的档案,每个主题都有文档,因此新的领域如下:

-Dossier(Name,Subjects[])
-Subject(Number,Documents[])
-Document(Name)

对于这几个档案(7%),我必须将一个简单的设计更改为一个更复杂的设计。我的问题是:我可以使用一种设计模式或任何想法来支持主题,但避免更改初始域。

您只需保留从档案到主题集合文档集合的引用/链接(因此它将是-档案(名称、文档[],主题[]))并在DB/编程语言级别实现一些验证规则,如:当档案中的主题集合不为空时,该档案不能有任何文档(文档集合必须为空)。通过这种方式,您只需添加更改模型,而无需实际修改或删除任何现有内容

或者,您可以创建一个基类Dossier,它有名称和两个子类:DossierWithSubject(包含主题集合)和DossierWithoutSubject(包含文档集合),后者正是您目前所拥有的。所以,只要把你当前的档案当作没有主题的档案就行了


希望这一切都能有所帮助。

我想您正在寻找合适的人选


<>你也可以在这里找到有用的。

选择模式

时有很多事情要考虑。 如果设计根据档案文件外部的上下文动态更改,则符合委托模式()

如果在“构造”或“初始化”阶段设置,可以考虑<强> pIMPL <强>(或>强>装饰器< /强>()模式

或者也许你需要一些不同的东西

选择的解决方案应该取决于您需要解决的确切问题。 两条简单规则是:

  • 以构图代替继承
  • 封装可变性
  • 1) 表示将工作委托给组件。每个组件都应该做“一件事”,但要做好

    2) 意味着如果您的系统中存在需要更改的部件,请将其封装在单独的实体中

    对于设计模式方面的介绍,我可以向您推荐“四人帮”一书