3.2 KiB
项目结构
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]