• M(Model)模型层:与数据库交互的数据模型,负责进行数据相关操作。
  • v(View)视图层:与用户交互的数据区,负责收集展示数据。
  • c(Controller)控制层:负责接收数据和逻辑处理。控制层收到请求之后,会调用模型层与数据库交互获取数据,最后将数据返回给视图层。
  • MVC模型还包括D(Dao)数据访问层:与数据库建立连接,负责数据的增删改查。

    各模块的作用

    bootstrap层(启动层)
    如果是springboot项目,它是启动模块,包含了启动类,配置文件,打包插件等,该模块可通过直接或间接依赖引用其他各模块的代码。
    web层(UI层)
    web层是应用的视图展示层(可选,如果不需要提供web服务,可以去掉这一层),web层被bootstrap层依赖,并依赖service层以实现具体的业务逻辑。
    facade层(外观层)
    facade层是应用对外提供的接口层(可选,如果不需要对外提供服务,可以去掉这一层),用于提供接口描述文件(如service,DTO),不包含任何业务逻辑。
    service层(服务层)
    service层作为web层或facade层与model层之间的桥梁,是实现主要业务逻辑的模块(如提供访问数据库之前的数据校验,处理数据库返回的值,发布RPC服务等)。
    model层(模型层)
    model层用于存放实体类,即定义业务逻辑的对象。
    dao层或者dal层(数据库层)
    dao层主要是用于访问数据库,即编写对数据库的增删改查的sql语句实现。 utils层(工具层)
    utils层提供了一些公共的工具库类,这些类可以被应用中的所有类使用。

    DDD分层

    DDD分层是基于领域驱动模型设计的分层结构,在 DDD的经典四层分层架构之上进行了改良,采用依赖倒置的方式解决领域层与基础设施层的相互依赖问题,使其更加符合经典的六边形架构。

    各模块的作用

    bootstrap层(启动层)
    如果是springboot项目,它是启动模块,包含了启动类,配置文件,打包插件等,该模块可通过直接或间接依赖引用其他各模块的代码。
    web层(展示层)
    web层是应用的视图展示层(可选,如果不需要提供web服务,可以去掉这一层),web层被bootstrap层依赖,并依赖application层展示具体的业务逻辑。
    facade层(外观层)
    facade层是应用对外提供的接口层(可选,如果不需要对外提供服务,可以去掉这一层),用于提供接口描述文件(如service,DTO),不包含任何业务逻辑。
    application层(应用层)
    application层为领域驱动设计中的应用层,位于领域层之上,可以调用领域服务、使用领域模型。该层更专注于具体应用所需要的逻辑处理,为领域层需要协作的各个领域服务协调任务、委派工作而不包含核心业务规则。当存在facade层时,application层依赖facade层,提供facade层接口的具体实现逻辑。
    domian层(核心领域层)
    domain层为领域驱动设计中的领域层,该层定义了领域模型并使用领域模型提供了核心领域服务(以service结尾命名)。领域层是业务的核心,不依赖其他模块,从而保证核心系统对外部系统的解耦。
    若需在domian层查询数据库或者调用第三方tr服务(数据库和tr代理类在infrastructure层),只需在domain层定义一个接口用以注入实现类,在infrastructure层实现调用即可。
    infrastructure层(基础设施层)
    infrastructure层为系统提供了各类基础设施,包含RPC、Message、DB、Cache等三方系统的依赖,流程引擎、规则引擎等service层可能用到的编排工具。infrastructure层依赖domian层但不被domain层直接依赖,通常通过依赖反转的方式提供domian层中领域服务的具体实现。