ApplicationStructure - marmot-cn/marmot-framework GitHub Wiki
应用目录结构
结构
* src
* Common
* Home
* Controller
* IndexController.php
* HealthzController.php
* 应用
* Adapter
* Command
* CommandHandler
* Controller
* Cache
* Model
* Repository
* Translator
* View
* WidgetRules
* Common
* 应用
* Application.php
* config.php
* errorConfig.php
* errorDesciptionConfig.php
* routeRules.php
目录
1. Common 文件夹
公共文件夹, 里面放置公用的代码.
2. Home 家文件夹
里面放置默认访问的Controller
层, 但是可以通过Application
的getIndexRoute
修改首页路由.
- IndexController.php: 首页路由
- HealthzController.php:
k8s
检测健康状态的Controller
代码
3. 应用
具体应用代码文件夹, 使用大驼峰命名, 如News
.
3.1 Adapter
保存适配器文件夹, 统一放置适配器代码. 里面包含文件夹
- Query:
Query
文件夹- 放置
Query
文件 - Persistence: 持久层文件夹
- 保存
*Cache
缓存文件 - 保存
*Db
数据库文件
- 保存
- 放置
3.2 Command
保存命令文件夹, 里面存放所有针对系统的命令. 对应用户的操作都抽象为一个个命令.
3.3 CommandHandler
保存命令处理器文件夹, 里面存放所有针对命令的处理器文件. 每一个命令至少对应一个处理器. 所有处理器会通过CommandBus
调用触发.
3.4 Controller (mvC)
保存**控制层(Controller)**文件夹, 存储该应用的控制层文件. 注意控制层的一些说明:
- 控制层的函数映射路由
- 控制层文件仅仅用于调度
3.5 Model (Mvc)
保存**领域模型(Model)**文件夹, 存储该应用的模型文件.
3.6 Repository
保存存储层文件夹, 所有数据的访问统一通过Repository
(代理模式)代理到真实的Adapter
访问数据
3.7 Translator
保存翻译器文件夹, 每个翻译器文件和适配器文件一一对应, 不同的数据源通过适配器和翻译器统一转换为领域模型
3.8 View (mVc)
保存视图层文件夹, 每个视图层内的视图文件对应的是视图文件.
- 接口的视图
- 模板的视图
3.9 Cache
保存缓存文件夹, 保存
- FragmentCacheQuery: 片段缓存
- DataCacheQuery: 数据缓存
4. WidgetRules
保存控件规范文件夹. 按照通用和每个应用存放, 映射网站的所有控件约束. 开发人员前期确定完成后, 里面编写控件文件, 调度层只是负责调用.
5. Application.php
应用文件, 现在应用和框架通过IApplication
解耦. 该文件主要干如下事情:
- 设置默认路由
- 返回路由规则
- 初始化错误配置文件(常量)
- 初始化错误描述配置文件
- 初始化全站配置文件(常量)
6. config.php
初始化全站配置文件(常量)
7. errorConfig.php
初始化错误配置文件(常量)
/**
* 新闻来源格式不正确
*/
define('NEWS_SOURCE_FORMAT_ERROR', 1001);
/**
* 新闻内容格式不正确
*/
define('NEWS_CONTENT_FORMAT_ERROR', 1002);
8. errorDesciptionConfig.php
初始化错误描述配置文件
return array(
PARAMETER_IS_EMPTY=>
array(
'id'=>PARAMETER_IS_EMPTY,
'link'=>'',
'status'=>403,
'code'=>'PARAMETER_IS_EMPTY',
'title'=>'数据不能为空',
'detail'=>'表述传输了一个空数据,但是该数据不能为空.',
'source'=>array(
'pointer'=>''
),
'meta'=>array()
),
9. routeRules.php
返回路由规则
return [
//监控检测
[
'method'=>'GET',
'rule'=>'/healthz',
'controller'=>[
'Home\Controller\HealthzController',
'healthz'
]
],
[
'method'=>['GET'],
'rule'=>'/'.$fetchControllerRoutes,
'controller'=>[
'Common\Controller\FetchController',
'filter'
]
],