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层, 但是可以通过ApplicationgetIndexRoute修改首页路由.

  • 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)**文件夹, 存储该应用的控制层文件. 注意控制层的一些说明:

  1. 控制层的函数映射路由
  2. 控制层文件仅仅用于调度
3.5 Model (Mvc)

保存**领域模型(Model)**文件夹, 存储该应用的模型文件.

3.6 Repository

保存存储层文件夹, 所有数据的访问统一通过Repository(代理模式)代理到真实的Adapter访问数据

3.7 Translator

保存翻译器文件夹, 每个翻译器文件和适配器文件一一对应, 不同的数据源通过适配器翻译器统一转换为领域模型

3.8 View (mVc)

保存视图层文件夹, 每个视图层内的视图文件对应的是视图文件.

  • 接口的视图
  • 模板的视图
3.9 Cache

保存缓存文件夹, 保存

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'
            ]
        ],