在PHP DDD应用程序中,文件夹结构如下:
<>之前app/视图/控制器/域/模型/(生成的表单)服务/工厂/之前下面的类表示什么(从DDD术语的角度来看)以及它们的推荐位置是什么。
这看起来不像一个DDD应用程序。
特别是,ORM生成的模型不是域模型。如果您的应用程序的核心价值在于数据,而您只需要处理CRUD操作,那么这是一件好事。在DDD应用程序中,模型来自领域专家的语言,这是一个知道您的应用程序目标业务的人,因为这是他自己的工作,但对技术一无所知。
如果你的领域专家谈论dictionary和UserCollection(很奇怪,顺便说一句),这些类实际上是模型。从定义上看,HtmlValidator并不是一个商业术语。
如果应用程序的价值来自技术组件,我建议您避免使用DDD技术。仅在处理非常复杂的业务规则的应用程序中使用DDD。
编辑
大多数情况下,域模型至少需要一个单独的模块。在PHP中,我建议您将它捆绑在(至少)一个单独的包中。然而,使用MVC模式的并不意味着使用DDD:您可以在数据驱动的应用程序中使用MVC,这很好。在这种情况下,我将只在模型中放入ORM生成的类。在这种情况下,我会把所有的类放在controllers/lib文件夹中。
结构还不错,但是我会把模型重命名为实体,因为在MVC中,模型由服务、实体和其他类型的类组成。
Dictionary和HtmlValidator没有标识,并且是无状态的,这意味着它们属于服务。
app/
views/
controllers/
domain/
entities/ ( orm generated )
services/ (HtmlValidator)
factories/
虽然它看起来像一个非常简单的应用程序,但它确实意味着您不应该开始使用DDD构建块。每个应用程序都会随着时间的推移而增长,最好从适当的结构开始,以避免以后需要重构它。
作为下一件事,你应该考虑创建某种模块,这样你就可以分离逻辑部分。您还可以将应用程序和表示层与域和基础结构层分开:
app/
views/
controllers/
domain/
module1
entities/
services/
factories/
module2
....
vendor/ (infrastructure layer)
ORM
... (some other 3rd party libs)