项目分层架构规范

475 阅读4分钟
1. 类命名规范
    Controller层、Service层、Repository层等类名需要区分admin和client,
例如:XxxAdminController、XxxAdminService、XxxAdminRepository。

2. 包路径规范
    所有项目顶级包路径都是: top, common, integration, core, 不允许再新增顶级包路径。
api
- client
    - enums
    - dto
        XxxDTO
    - param
    - result
    XxxClientApi
- admin
    - enums
    - vo(模型)
    - param
    XxxAdminApi
app
- top // 对外服务层
    - client // 客户端相关接口
        - controller
            XxxClientController
        - rpc
            XxxClientApiImpl
    - admin // 管理端相关接口
        - controller
            XxxAdminController
        - rpc
            XxxAdminApiImpl
    - job
    - message
- core // 核心层
    - enums
    - constants
    - repository // 数据库的语义层
        - client
            - model(模型)
                XxxModel 
            - impl
                XxxClientRepositoryImpl
            XxxClientRepository
        - admin
            - vo(模型)
            - impl
                XxxAdminRepositoryImpl
            XxxAdminRepository
    - service
        - client
            - impl
                XxxClientServiceImpl
            XxxClientService
        - admin
            - impl
                XxxAdminServiceImpl
            XxxAdminService
- integration // 接入层
    - dal
    - user
    - risk
- common // 工具类
3. 代码分层结构
              Controller     Api
                |------------|
                       |
                    Service [可选]
                       |            
        |----------------------------|   
Repository(Entity->Model/VO)      Facade
        |                            |
    Dao(Entity)              ClientApi/AdminApi
        |
      Mapper
     
模型: Entity / VO / Model / DTO 

         VO(AdminController)  Model->DTO(ClientController)
                 |                     |
Repository:  Entity->VO          Entity->Model
                  
参数: Request / Response /  Param / Result        
适配查询条件  
4. 模型与参数的定义规范
模型和参数的区别:模型和数据库表直接对应,参数和接口对应!
模型定义:
    B端模型: XxxVO
    C端模型: XxxDTO     // Entity->DTO, Model->DTO(去掉前端不可见字段)
    内部模型: XxxModel  // 对Entity做语义化(Json数据转模型:String->VO)
    内部模型: XxxEntity // 完全和数据库一对一映射
参数定义:
    Rpc场景: XxxParam, XxxResult(包含若干XxxDto)
    Http场景: XxxRequest, XxxResponse(包含若干XxxDto)

5. 方法命名规范(小驼峰 - 动宾短语)
注意:
    a.尽量通过主键或UK查询;
    b.非特殊情况,修改和删除都应该通过id进行;
    c.在delete或update后加limit。
接口列表方法命名入参返参
单个查询get[Mmm][ByNnn]Get[Mmm][ByNnn]ParamGet[Mmm][ByNnn]Result
列表查询list[Mmm][ByNnn][Mmm]PageQueryParam[Mmm]PageQueryResult
计次查询count[Mmm][ByNnn][Mmm]PageQueryParamLong
B端-分页查询pageQuery[Mmm][ByNnn][Mmm]PageQueryParam[Mmm]PageQueryResult
C端-分页查询pageSearch[Mmm][ByNnn][Mmm]PageSearchParam[Mmm]PageSearchResult
新建createXxxVO / XxxEntityLong
修改update[ById] / update[ByUk]XxxVO / XxxEntityInteger
删除delete[ById] / delete[ByUk]LongInteger
# 各级路径详情

// api.client 提供给外域使用的rpc接口,用于外域访问本服务    -- done
- client
    - constants
    - enums
        ActivityBizTypeEnum
        ActivityPackageStateEnum
        ActivityPackageTypeEnum
        ActivityStateEnum
        ActivityTypeEnum
        PrizeTypeEnum
        XxxEnum
    - dto
        ActivityBaseInfoDTO
        ActivityAccessRecordDTO
        BizTypeConfigDTO
        PrizeBaseInfoDTO
        PrizeSendRecordDTO
        ShareBindDTO
        ShareDTO
        XxxDTO
    - param
        ActivityConsultParam
        ActivityTriggerParam
        LuckDrawQueryParam
        XxxParam
    - result
        ActivityConsultResult
        ActivityTriggerResult
        LuckDrawActivityResult
        XxxResult
    ActivityConsultClientApi // 发奖咨询rpc
    ActivityTriggerClientApi // 活动发奖rpc
    TaskCallbackClientApi    // 任务回调rpc
    LuckDrawClientApi        // 抽奖机活动rpc
    TimedPrizeClientApi      // xx活动rpc
    XxxClientApi
 
// api.admin 提供给admin应用使用的rpc接口,用于b侧数据同步到c侧    -- done
- admin 
    - enums
    - vo(模型)
        BizTypeConfigVO
        ActivityPackageVO
        ActivityVO
        PrizeVO
        BudgetVO
        CountControlConfigVO // 计次(活动、奖品)
        XxxVO
    - param
        ActivityPackagePageQueryParam
        ActivityPageQueryParam
        UpdateActivityPackageStateParam
        UpdateActivityStateParam
        BatchCreateActivityParam
        BatchUpdateActivityStateParam
        XxxParam
    BizTypeConfigAdminApi   // 业务类型配置
    ActivityPackageAdminApi // 活动包
    ActivityAdminApi        // 活动
    PrizeAdminApi           // 奖品
    XxxAdminApi

// app.top 对外服务层    -- done
- top 
    - client // 客户端相关接口
        - controller
            - request
                LuckyDrawRequest
                TimedPrizeQueryRequest
                XxxRequest
            - response
                LuckyDrawResponse
                TimedPrizeQueryResponse
                XxxResponse
            LuckyDrawController // 活动Controller
            TimedPrizeController
            VenueCouponController
            XxxClientController  
        - rpc // 入参返参定义在api模块中  api.client.param/result
            ActivityConsultClientApiImpl 
            ActivityTriggerClientApiImpl 
            TaskCallbackClientApiImpl    
            LuckDrawClientApiImpl         
            TimedPrizeClientApiImpl
            XxxClientApiImpl
    - admin // 管理端相关接口
        - controller // 仅内部使用:用于测试、线上数据订正
            BizTypeConfigAdminController
            ActivityPackageAdminApiImpl
            ActivityAdminController
            XxxAdminController
        - rpc // 入参返参定义在api模块中 api.admin.vo
            BizTypeConfigAdminApiImpl
            ActivityPackageAdminApiImpl
            ActivityAdminApiImpl
            XxxAdminApiImpl
    - job // job写在b侧应用,可以调用c侧应用rpc接口处理业务
    - message

// app.core 核心层    -- done
- core
    - enums
    - constants
    - converter // 模型转换:Entity->Model->DTO,Entity<->VO
        AccessCountConverter
        ActivityAccessRecordConverter
        ActivityConverter
        ActivityPackageConverter
        BizTypeConfigConverter
        BudgetConverter
        LotteryCodeRecordConverter
        LotteryCodeTemplateConverter
        PrizeConverter
        PrizeSendRecordConverter
        ShareBindConverter
        ShareBoostRecordConverter
        ShareConverter
        XxxConerter
    - repository // 数据库的语义层
        - client
            - model(模型)
                AccessCountModel
                ActivityAccessRecordModel
                ActivityModel
                ActivityPackageModel
                BizTypeConfigModel
                BudgetModel
                CountControlConfigModel
                CountControlItemConfigModel
                LotteryCodeRecordModel
                LotteryCodeTemplateModel
                PrizeModel
                PrizeSendRecordModel
                ShareBindModel
                ShareBoostRecordModel
                ShareConfigModel
                ShareModel
                UserAddressModel 
            - impl
                XxxClientRepositoryImpl
            AccessCountClientRepository
            ActivityAccessRecordClientRepository
            ActivityClientRepository
            ActivityPackageClientRepository
            BizTypeConfigClientRepository
            BudgetClientRepository
            LotteryCodeRecordClientRepository
            LotteryCodeTemplateClientRepository
            PrizeClientRepository
            PrizeSendRecordClientRepository
            ShareBindClientRepository
            ShareBoostRecordClientRepository
            ShareClientRepository
            UserAddressClientRepository
            XxxClientRepository
        - admin
            - vo(模型) // 这里不需要,b侧VO模型直接对外
            - impl    // 入参返参定义在api模块中 api.admin.vo
                XxxAdminRepositoryImpl
            BizTypeConfigAdminRepository
            ActivityPackageAdminRepository
            ActivityAdminRepository
            BudgetAdminRepository
            XxxAdminRepository
    - service // [没想好:业务逻辑在service层处理,controller层只处理简单逻辑]
        - client
            - impl
                XxxClientServiceImpl
            ActivityConsultService
            ActivityTriggerService
            XxxClientService
        - admin
            - impl
                XxxAdminServiceImpl
            XxxAdminService

// app.integration 接入层(DAL数据库访问、SAL调用外部的服务)  -- done
- integration 
    - dal
        - promo_user
            - entity(模型)
                ActivityAccessRecordEntity // 用户参与活动记录(幂等)
                AccessCountEntity          // 参与计次
                PrizeSendRecordEntity      // 发奖纪录
                ShareBindEntity            // 分享绑定
                ShareEntity                // 分享
                UserAddressEntity          // 用户地址
                XxxEntity
            - param
                AccessCountUkParam
                ShareBindKeyParam
                AccessCountPageQueryParam
                ActivityAccessRecordPageQueryParam
                SharePageQueryParam
                XxxParam
            - master
                - impl  // XxxMasterDao
                    AccessCountMasterDaoImpl
                    ActivityAccessRecordMasterDaoImpl
                    PrizeSendRecordMasterDaoImpl
                    ShareBindMasterDaoImpl
                    ShareBoostRecordMasterDaoImpl
                    ShareMasterDaoImpl
                    UserAddressMasterDaoImpl
                    XxxDaoImpl
                - mapper // 插件自动生成,禁止修改
                    AccessCountMasterMapper
                    ActivityAccessRecordMasterMapper
                    PrizeSendRecordMasterMapper
                    ShareMasterMapper
                    ShareBindMasterMapper
                    ShareBoostRecordMasterMapper
                    UserAddressMasterMapper
                    XxxMapper
                AccessCountMasterDao // 拓展Mapper,自动创建的Mapper不满足时进行功能拓展
                ActivityAccessRecordMasterDao
                PrizeSendRecordMasterDao
                ShareBoostRecordMasterDao
                ShareBindMasterDao
                ShareMasterDao
                UserAddressMasterDao
                XxxMasterDao
        - promo_config
            - param
            - entity
                BizTypeConfigEntity
                ActivityPackageEntity
                ActivityEntity
                PrizeEntity
                LotteryCodeTemplateEntity
                ActivityLogEntity
                XxxEntity
            - master
                - impl
                    XxxMasterDaoImpl
                - mapper
                    XxxMasterMapper
                ActivityLogMasterDao
                ActivityMasterDao
                ActivityPackageMasterDao
                BizTypeConfigMasterDao
                LotteryCodeTemplateMasterDao
                PrizeMasterDao
                XxxMasterDao
        - promo_budget
            - param
            - entity
                BudgetEntity
            - master
                - impl
                    BudgetMasterDaoImpl
                - mapper
                    BudgetMasterMapper
                BudgetMasterDao
    - user // SAL调用外部的服务
        - impl 
            UserClientFacadeImpl
        UserClientFacade
    - risk
        - impl 
            RiskClientFacadeImpl
        RiskClientFacade
    - abtest
    - crowd

// app.common  -- done
- common // 工具类
    - annotation
    - aop
        XxxAop
    DateUtil
    RedisUtil
    IDGenerator