代码分层设计

简介: 在搭建一个项目之前,除了要进行架构和业务方面的设计和分析,往往还需要对代码的结构进行规范化设计。而分层思想,是应用系统最常见的一种架构模式。

代码分层设计

在搭建一个项目之前,除了要进行架构和业务方面的设计和分析,往往还需要对代码的结构进行规范化设计。而分层思想,是应用系统最常见的一种架构模式。

我们会将系统进行横向切割,根据业务职责划分,这就是代码分层。

这样划分的目的是规范软件系统的逻辑结构,以便于后期开发和维护。

一个软件系统就像一幅传世名画,在色彩和线条的表面之下,是精妙的几何结构。

席里柯的《梅杜莎之筏》,画高五米,宽超七米,结构宏伟,气势磅礴,人体的塑造坚实而有力。尤其是它的画面上,由十几个人构成了两个金字塔式的几何图形。这些就是古典主义的特色。


上面是题外话,下面继续介绍代码分层。

我们熟悉的MVC(Model-View-Controller,分别是模型层、视图层、控制层)三层架构就是非常典型的分层架构模式。

它将页面和业务逻辑分离,提高应用的可扩展性及可维护性。

MVC 三层架构只是概念层面的指导思想,如果想要让开发更规范、职责更明确、层次更清晰,需要下面更为细致的代码分层设计。

在介绍代码的分层之前,需要先了解代码分层结构中的领域模型。

领域模型

下面介绍几个常用的领域模型,其中参考了阿里巴巴编码规范的设计。

DO

DO(Data Object)与数据库表结构一一对应,通过 DAO 层向上传输数据源对象。

DTO

DTO(Data Transfer Object)是远程调用对象,它是 RPC 服务提供的领域模型。

需要注意的是,对于 DTO 一定要保证其序列化,实现 Serializable 接口,并显示提供serialVersionUID,否则在反序列化时,如果 serialVersionUID 被修改,那么反序列化会失败。

BO

BO(Business Object)是业务逻辑层封装业务逻辑的对象,一般情况下,它是聚合了多个数据源的复合对象。

VO

VO(View Object) 通常是请求处理层传输的对象,它通过 Spring 框架的转换后,往往是一个 JSON 对象。

代码分层

在传统的MVC三层结构的基础之上,我们将业务系统设计为如下四层结构:前端层、请求处理层、业务逻辑层和持久层。

下面详细介绍一下各个分层的作用。

前端层

前端层的内容涵盖了从系统外发起的一切请求,还包括定时任务的触发配置,以及系统的监控和检测程序。

请求处理层

请求处理层的作用包括通过模板引擎(FreeMarket、Velocity等)的页面渲染、封装RESTful API的HTTP接口,以及暴露给前端调用的各种类型的接口。

业务逻辑层

业务逻辑层的职责是与数据持久层交互,包括对多个数据源的操作进行聚合,并且提供组合复用的能力。

如果网站采用分布式架构,或者数据库需要分库,也包括对RPC服务的统一调用,为了减少不必要的重复调用RPC服务,RPC Service中对数据进行统一处理以后再返回给Manager,是一个节省RPC连接的做法。

此外,它也是业务通用能力的处理层,其中还包括缓存方案、消息监听(MQ)、定时任务、参数校验、数据转换、异常处理等。

数据持久层

数据持久层承载了数据存储和访问的能力。包括通过DAO访问数据库的能力和通过DAP访问外部数据接口的能力。

良好的代码分层设计可以使代码的耦合性大大降低,易用性大大增强,为系统的微服务化和模块化拆分打下良好的基础。


目录
相关文章
|
网络安全 网络架构
ENSP-Kali环境联动
1.ENSP介绍 eNSP(Enterprise Network Simulation Platform)是一款由华为提供的免费的、可扩展的、图形化的网络设备仿真平台,主要对企业网路由器、交换机、WLAN等设备进行软件仿真,完美呈现真实设备部署实景,支持大型网络模拟,让你有机会在没有真实设备的情况下也能够开展实验测试,学习网络技术。
1446 0
ENSP-Kali环境联动
hutool工具对象序列化和反序列化
hutool工具对象序列化和反序列化
hutool工具对象序列化和反序列化
|
5月前
|
机器学习/深度学习 人工智能 前端开发
终端里的 AI 编程助手:OpenCode 使用指南
OpenCode 是开源的终端 AI 编码助手,支持 Claude、GPT-4 等模型,可在命令行完成代码编写、Bug 修复、项目重构。提供原生终端界面和上下文感知能力,适合全栈开发者和终端用户使用。
44206 11
|
Java 数据库 关系型数据库
优秀的代码都是如何分层的?
好的应用分层应该做到1.方便后续代码进行维护扩展;2.分层的效果需要让整个团队都接受;3.各个层职责边界清晰。本文针对controller,service, mapper三个维度的应用分层进行整理,以优化后续代码的维护
10721 0
|
存储 前端开发 API
DDD领域驱动设计实战-分层架构
DDD分层架构通过明确各层职责及交互规则,有效降低了层间依赖。其基本原则是每层仅与下方层耦合,分为严格和松散两种形式。架构演进包括传统四层架构与改良版四层架构,后者采用依赖反转设计原则优化基础设施层位置。各层职责分明:用户接口层处理显示与请求;应用层负责服务编排与组合;领域层实现业务逻辑;基础层提供技术基础服务。通过合理设计聚合与依赖关系,DDD支持微服务架构灵活演进,提升系统适应性和可维护性。
1695 10
|
设计模式 Java 关系型数据库
【阿里规约】阿里开发手册解读——命名规范篇
本文中所有代码命名规范遵循《阿里规约》,从包名、类名、变量名等角度展开,详细阐述测试类、枚举类、数组、布尔型变量、方法等元素的命名规范。
【阿里规约】阿里开发手册解读——命名规范篇
|
存储 消息中间件 JSON
DDD基础教程:一文带你读懂DDD分层架构
DDD基础教程:一文带你读懂DDD分层架构
|
存储 设计模式 Java
阿里官方代码规范
这篇文章详细介绍了阿里巴巴官方的代码规范,包括命名规则、常量使用、方法覆写、并发处理、注释规范、数据库设计等多个方面,旨在提高代码的可读性、维护性和扩展性。
|
存储 消息中间件 容灾
阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计
本文是国内企业IM的事实王者钉钉首次对外深度解密其即时消息服务(即DingTalk IM,简称DTIM)的技术设计实践。
1982 0
阿里IM技术分享(八):深度解密钉钉即时消息服务DTIM的技术设计