## 项目结构 ### `arch` 目录 `arch` 将业务代码与框架代码分离,主要实现一下几点功能: - 启动服务加载 - 逻辑分层基类 - 统一输出处理 - 统一错误处理 - 自动缓存处理 - 标准查询能力 - 代码生成器 - 数据库能力扩展 - Request能力扩展 - HTTP请求/数据库查询 Debug - 一些辅助函数 ### `app` 目录 `app` 内存放业务逻辑代码,有以下几个目录: #### [ `Console` 目录] 命令行程序的核心引导文件; #### [ `Core` 目录] 一些核心的基类放在这儿,供其他类继承调用; #### [ `Events` 目录] 公用事件,事件应当是公用的,而监听是各自的; ### [ `Exceptions` 目录] 错误类的定义,如有需要自定义错误码等,请在该目录定义; ### [ `Models` 目录] 模型层的定义,业务应围绕数据进行展开,数据是公用的,而Repository仓库是各自的; ### [ `Domains` 目录] 以功能点为领域进行开发,这是本项目结构的核心部分;旨在进行低耦合的开发,明确各个功能细分; `Domains` 文件结构: ``` Domains 1 ├── Console │── Database │ └── migrations │── Http │ ├── Controllers │ ├── Middleware │ └── Requests ├── Providers ├── Repositories ├── Routes ├── Services └── Tests └── Services Domains 2 ├── Console │── Database │ └── migrations │── Http │ ├── Controllers │ ├── Middleware │ └── Requests ├── Providers ├── Repositories ├── Routes ├── Services └── Tests └── Services ``` > 生成命令: `php dipper make:domain {Name}` #### 请求生命周期: Route -> Request -> Controller -> Service -> Repository -> Model #### 路由 (Route) 生成的Domain中会默认含有两个路由文件 api.php 和 web.php。 api.php 会有全局的json输出处理,所有的api接口都应该放在这个目录。 web.php 适合书写页面文件的路由。 - 注意:路由的一个前缀建议为该Domain名称的 复数形式。 #### 请求(Request) - `Request` 可以放表单验证/身份认证 规则。 - `Request` 只能在控制器里被注入使用,在注入时自动运行验证规则,如果不通过就立即抛出异常。 > 生成命令: `php dipper make:request {RequestName} [DomainName]` #### 控制器(Controller) - 尽量不要将业务逻辑写在Controller层,放在Service层可以得到更好的复用。 > 生成命令: `php dipper make:controller {ControllerName} [DomainName]` #### 服务层(Service) 主要书写业务逻辑的地方,放在Service层可以得到更好的复用。如一个功能同时拥有后台和手机端等,是可以公用一个Service来查询数据的。 > 生成命令: `php dipper make:service {ServiceName} [DomainName]` #### 仓库层(Repository) 主要书写数据库查询的地方,一些复杂的查询应该写这里,方便后期做查询索引等优化。 > 生成命令: `php dipper make:repository {RepositoryName} [DomainName]`