组织我的基于DDD的Web应用程序的目录结构?

时间:2011-08-09 18:55:29

标签: php domain-driven-design directory-structure

我已经开始关注创建我的Web应用程序的正常MVC方式,并看看了Domain Driven Design - DDD。

单独Models,我现在有CollectionsEntitiesDataMappers&我的申请中的Repositories。完全分离和模块化肯定,但现在我的目录结构只是一个完整的混乱!

由于我以前从未使用DDD应用程序,因此我对如何组织文件结构几乎一无所知。

以下是适当的目录结构吗?
注意:我使用的是PHP5,但我认为这个问题与语言无关。

/application
    /common
        /libraries
        /helpers
    /temp
        /cache
    /domain
        /collections
        /entities
        /datamappers
        /repositories
    /ui
        /controllers
        /view

1 个答案:

答案 0 :(得分:5)

我认为这是有道理的,但是,这会将你的模块分成他们所在的层,而不是他们做什么。例如,在这种结构中,如果你想要一个身份验证和打印模块,你可能会有这样的事情:

    /common
        /helpers
             /Authentication
                 /AuthenticationService.php
             /Printing
                 /PrintingService.php
    /domain
        /entities
             /Authentication
                 /Identity.php
             /Printing
                 /Printer.php
        /datamappers
             /Authentication
                 /IdentityDataMap.php
             /Printing
                 /PrinterDataMap.php

在这样的系统中工作,我可以说,一方面,很难保持模块之间的界限不相互啮合,只是因为人类在层中工作,并将层视为'全部一起'。仅从组织的角度来看,我真的不希望打开三个根级目录来使用特定模块。我们将项目组织到目录中,以便我们更容易处理,而不是编译器。

如果我再次这样做,我会逐层分隔一些事物,比如说UI代码,在另一个层面上分开,而业务代码分别在另一个层面上分开,然后按照那个模块分开。我认为更多的混合动力,但也许更好。

    /domain
        /Printing
            /entities
            /datamappers
            /repositories
        /Auth
            /entities
            /datamappers
            /repositories
    /ui
        /controllers
        /view