美文网首页
java开发 结构分层与领域模型的思考

java开发 结构分层与领域模型的思考

作者: dylan丶QAQ | 来源:发表于2021-04-19 22:03 被阅读0次

最近因为领域模型的原因重新来思考这个问题。一起干饭!


本章主要内容

  • 如何分层
  • 如何定义领域模型
  • 一般命名规则

问题:由于是个人开发,在项目开发中,使用EasyCode进行代码生成,所以各层使用的领域模型都是一样的,controller层使用实体类去接受各种参数,正常使用是没有问题,但是在项目运行的过程中,在调用接口的时候会因为多传参数导致意想不到的问题,更重要的是如果有人使用接口进行注入攻击的时候,会更加的痛苦。

1.如何分层

之前的开发过程中,均是使用 controller,service, mapper三层。最近在看了许多blog后,借鉴总结了一下,并会在以后的日常开发中使用:

  • Web 层(controller):主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等。
  • Service 层:相对具体的业务逻辑服务层。
  • Manager 层:通用业务处理层,它有如下特征(可以抽象提取出来的&与外部通信的&解决方案):
    • 对第三方平台封装的层,预处理返回结果及转化异常信息;
    • 对Service层通用能力的下沉,如缓存方案、中间件通用处理;
    • 与DAO层交互,对多个DAO的组合复用。
  • DAO 层:数据访问层,与底层 MySQL、Oracle、Hbase 进行数据交互。

这里要解释一下Manager 层,在我的理解,Manager层即是对service层的扩展与提取,提取在于:不至于让service层过于庞大,让一些特定的操作在特定的包、类中实现,也能体现出整洁性😀。扩展在于:扩展对MVC的扩展😄。

2.如何定义领域模型

因为之前的原因,所以现在项目中,我使用到的领域模型如下:

  • DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
  • VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。

其中,DO即最基本的结构,与数据库表结构对应,取出后,可以根据情况在service中转VO或DTO,之后向外传输,中间的转型只有一次即可。可能在大型的项目会有更细的划分。之后有get到再与大家分享。

3.一般命名规则

分层领域模型规约:

  • DO( Data Object):与数据库表结构一一对应,通过DAO层向上传输数据源对象。
  • DTO( Data Transfer Object):数据传输对象,Service或Manager向外传输的对象。
  • BO( Business Object):业务对象。 由Service层输出的封装业务逻辑的对象。
  • AO( Application Object):应用对象。 在Web层与Service层之间抽象的复用对象模型,极为贴近展示层,复用度不高。
  • VO( View Object):显示层对象,通常是Web向模板渲染引擎层传输的对象。
  • POJO( Plain Ordinary Java Object):在本手册中, POJO专指只有setter/getter/toString的简单类,包括DO/DTO/BO/VO等。
  • Query:数据查询对象,各层接收上层的查询请求。 注意超过2个参数的查询封装,禁止使用Map类来传输。

领域模型命名规约:

  • 数据对象:xxxDO,xxx即为数据表名。
  • 数据传输对象:xxxDTO,xxx为业务领域相关的名称。
  • 展示对象:xxxVO,xxx一般为网页名称。
  • POJO是DO/DTO/BO/VO的统称,禁止命名成xxxPOJO。

相关文章

网友评论

      本文标题:java开发 结构分层与领域模型的思考

      本文链接:https://www.haomeiwen.com/subject/mswdkltx.html