Oop 解释了插件设计模式(如Martin Fowler所述)

Oop 解释了插件设计模式(如Martin Fowler所述),oop,design-patterns,plugins,factory-pattern,Oop,Design Patterns,Plugins,Factory Pattern,正如Martin Fowler所解释的那样,我正在努力理解和练习 我可以理解它以何种方式使用该模式,并且它需要一个工厂根据当前使用的环境(test、prod、dev等)提供接口的正确实现。但是: 工厂如何准确读取环境值并决定创建哪个对象(实现IdGenerator接口) 工厂是否是域对象(DomainObject)的依赖项 非常感谢。您将希望获得“企业应用程序架构模式”的完整PFD。在福勒的网站上可以看到的基本上是任何章节的前半页:) 所描述的基本上是背后想法的扩展版本 我不认为“插件”实际

正如Martin Fowler所解释的那样,我正在努力理解和练习

我可以理解它以何种方式使用该模式,并且它需要一个工厂根据当前使用的环境(test、prod、dev等)提供接口的正确实现。但是:

  • 工厂如何准确读取环境值并决定创建哪个对象(实现
    IdGenerator
    接口)
  • 工厂是否是域对象(
    DomainObject
    )的依赖项

非常感谢。

您将希望获得“企业应用程序架构模式”的完整PFD。在福勒的网站上可以看到的基本上是任何章节的前半页:)
所描述的基本上是背后想法的扩展版本

我不认为“插件”实际上可以被描述为“模式”。这更像是其他设计选择的结果

你所拥有的是。。嗯。。。“包”,其中每个包中的主类实现第三方接口。这些包中的每一个都有其内部依赖项(其他类甚至其他库),这些依赖项用于某些特定的任务。每个包都有自己的配置(可以通过DIC配置添加),并且每个包都在主应用程序中“注册”


提到工厂几乎是一个错误,因为如今,功能将通过DIC应用

插件模式的目标是提供一个集中的配置运行时,以促进模块化和可伸缩性。决定选择哪个实现的标准可以是环境,也可以是其他任何东西,如帐户类型、用户组等。工厂只是根据选择标准创建所需插件实例的一种方法

实施选择标准 工厂如何读取选择标准(环境状态)取决于您的实现。一些常见的方法是:

  • 命令行参数
    ,例如,来自不同CI/CD管道阶段的CLI调用可以传递一个dev/staging/production参数
  • YAML配置文件
    可以反序列化为对象或解析
  • 类注释
    用环境标记每个实现
  • 功能标志
    ,例如类似SaaS的
  • 依赖注入
    类似框架
  • 产品线工程
    软件类
  • 休息端点
    ,例如。http://localhost/test/order 可以在不通知任何客户的情况下创建测试订单对象
  • HTTP请求参数
    ,例如标头或正文中的字段
依赖工厂 由于
DomainObject
调用工厂来创建具有所需实现的对象,因此工厂将是域对象的依赖项。也就是说,现代方法是使用依赖注入(DI)库(,)或具有内置DI(,)的框架。在这些情况下,仍然依赖于DI库或框架,但不明确依赖于任何工厂类

注意:PEAA第499-503页中描述的
插件设计模式是由Rice和Foemmel编写的,而不是Martin Fowler


对于可能决定否决我的问题的用户:请让我知道你否决我的问题的动机,以便我可以相应地更改我的问题。我愿意接受你的所有建议或批评。谢谢。我没有投反对票,但我认为反对票太多,主要是基于意见。谢谢,@markspace。我会尽量把范围缩小到更精确的范围谢谢teresko。我会深入研究你的答案。我得做一些。。。“相关性”,这可能需要一段时间。。。这可能有点让人困惑——这实际上是一个“醉酒后”的欢呼声!别担心,我用了一个醉醺醺的翻译:我读了你的答案,看了米斯科的视频。我将它们与我的系统(使用DIC和多个环境)以及Fowler的“插件”和。。。我明白了:-)我真的很感谢你的帮助。再次感谢你,祝你好运。