由于 2.x 将框架代码按功能模块化了,因此也相应重新规划了 DOF 项目目录结构。
在最极简模式下,DOF 2.x 项目可以只有一个 composer.json
文件。
基本目录结构
2.x DOF 项目顶级目录命名基本准守 UNIX-like 风格:
src
领域存放目录。实际项目中可以按业务边界放不限制数量的领域,每个领域都是一个独立的子系统,拥有独立的配置管理和相同而完整的目录结构。
src # 领域目录
└── User # 某个领域目录/领域标识
├── Err.php # 领域自定义错误文件
├── __domain__.php # 领域标志文件/领域元数据配置文件
├── Assembler # 数据组装器
│ └── User.php
├── Command # 领域用户自定义命令
│ └── User.php
├── Entity # 领域实体定义
│ └── User.php
├── Event # 领域事件类
├── HTTP # 当前领域内的 HTTP 适配目录
│ ├── Pipe # 当前领域暴露的 HTTP 端口使用的管道目录
│ ├── Port # 当前领域暴露的 HTTP 端口类目录
│ │ └── V1
│ │ ├── Api.php
│ │ ├── DoSthComplex.php
│ │ └── User.php
│ └── Wrapper # 当前领域暴露的 HTTP 端口使用的包装器目录
│ └── In
│ ├── ABC.php
│ └── User.php
├── Listener # 领域事件监听者/消费者
├── Repository # 领域仓库接口目录
│ └── UserRepository.php
├── Service # 领域内服务目录
│ ├── Application # 应用服务(用户自定义命名空间,框架没硬性要求,下同 Domain)
│ │ └── ShowUserService.php
│ └── Domain # 领域服务
└── Storage # 领域具体存储类+ORM类目录
└── MySQL
└── UserORM.php
etc
私有配置、环境变量配置存放目录,会被 \ETC
类自动读取。需要被版本控制所排除。
etc
目录里面的文件为系统/框架/领域默认私有配置。
etc
目录下的 domain
目录为领域专有私有配置目录,其下的目录为领域同名目录,存放有私有配置需求的领域配置。
其中 env.php
比较特殊,会被 \ENV
自动读取。
/etc/
/env.php
/mysql.php
/redis.php
/domain/
/User/
/env.php
/mysql.php
/redis.php
/Order/
/env.php
/mysql.php
/redis.php
/vendor/
/dof-php/
/utils/
/env.php
var
动态目录。存放编译文件、文件缓存、文件日志、上传临时文件等。
var
├── cache # 文件缓存
├── compile # 各种编译文件(Manager/项目配置) 存储目录
└── log-{php-user}
└── {custom}.{sapi}.{php-user}.{process}.log # DOF 日志文件格式
└── archive # 日志文件归档目录
└── 2038
└── 01
└── 19
└── {user}
└── {custom}
└── {sapi}
└── {user}.{custom}.{sapi}.20380119-123456-7890.log
www
网站根目录;存放 PHP-FPM 运行模式下的 HTTP 入口引导文件 index.php
、公开访问的静态资源等。
说明:该目录由 dof-php/http
模块自动创建。
ini
系统/框架初始化参数/全局领域配置等,会被 \INI
类自动读取。其下代码需要放在版本控制中。
ini
└── addons
└── dof-php
├── ddd
│ └── cmd.php # ddd 模块的命令行配置文件, CommandManager 主动读取该配置文件(下同)
├── http
│ └── cmd.php # http 模块的命令行配置文件
└── utils
└── cmd.php # utils 模块的命令行配置文件
boot
模块启动文件存放目录,里面的代码会在框架初始化之后依次被执行,里面的代码主要是各种 Manager 的初始化操作和顶级类命名空间别名定义。
boot
└── addons
└── dof-php
├── ddd
│ └── boot.php # ddd 模块的启动文件
├── http
│ └── boot.php # http 模块的启动文件
└── utils
└── boot.php # utils 模块的启动文件
gwt
GWT 测试用例存放目录。可按领域分子目录存放各自领域的测试用例。
lang
多语言配置文件存放目录。
DOF 2.x 项目目录树示例
tree