PHP中的域驱动设计架构

dan*_*car 0 php domain-driven-design

在具有如下文件夹结构的PHP DDD应用程序中:

app/
    views/
    controllers/
    domain/
        models/ ( orm generated )           
        services/
        factories/  

以下类将代表什么(从DDD术语的角度来看)以及它们的推荐位置.

  • 字典(基本功能:检查单词是否有效)
  • HtmlValidator(基本功能:检查字符串是否是有效的html)
  • UserCollection(基本功能:对用户集合的操作)

  • Gia*_*sio 5

    这看起来不像DDD应用程序.

    特别是,ORM生成的模型不是域模型.如果您的应用程序核心值在数据中并且您只需要处理CRUD操作,那么这是一件好事.

    在DDD应用程序中,模型来自领域专家的语言,即知道您的应用程序所针对的业务,因为它是他自己的工作,但对技术一无所知.

    如果你的领域专家谈论字典和UserCollection(很奇怪,顺便说一句)这样的类实际上是模型.根据定义,HtmlValidator不是商业术语.

    如果您的应用程序的价值来自技术组件,我建议您避免使用DDD tecniques.仅将DDD用于处理非常复杂的业务规则的应用程序.

    编辑
    大多数时候域模型值得(在任何时候)一个单独的模块.在PHP中,我建议你将它捆绑在(至少)一个单独的包中.但是,使用MVC模式并不意味着使用DDD:您可以将MVC用于数据驱动的应用程序,这很好.在这种情况下,我会在模型中只放入ORM生成的类.在这种情况下,我会将所有类放在controllers/lib文件夹中.