120 lines
3.2 KiB
Markdown
120 lines
3.2 KiB
Markdown
## 项目结构
|
||
|
||
### `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]`
|