代码分层设计

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

代码分层设计

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

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

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

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

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


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

我们熟悉的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访问外部数据接口的能力。

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


目录
相关文章
|
存储 前端开发 数据库
模块功能分层解耦
模块功能分层解耦
439 2
|
设计模式 JSON 架构师
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践
当提到系统间交互的时候,人们都会想到大名鼎鼎的防腐层,用来防止其他系统的模型变更对本系统造成影响。但是在实践这个模式的过程中,我们常常会遇到问题。此时我们也应该考虑下其他的系统交互方式。
27830 12
你真的需要防腐层吗?DDD 系统间的7种关系梳理与实践
|
敏捷开发 存储 搜索推荐
《阿里巴巴Java开发手册v1.4.0(详尽版)》更新,新增16条设计规约
阿里巴巴集团推出的《阿里巴巴Java开发手册》是阿里巴巴近万名开发同学集体智慧的结晶,以开发视角为中心,详细列举如何开发更加高效、更加容错、更加有协作性,力求知其然,更知其不然,结合正反例,让Java开发者能够提升协作效率、提高代码质量。
738504 3
|
设计模式 机器学习/深度学习 SQL
软考高级系统架构设计师通关经验分享
为什么考系统架构设计师是国家设立的计算机技术与软件专业技术资格考试(简称软考)中的一个高级科目,属于工程师高级职称系列,具有一定含金量。浙江省每年通过软考高级的人数约为1000+人,其中系统架构设计师科目的通过人数约为200+人。从学习角度来说,通过准备系统架构设计师的考试的过程,可以查漏补缺,并且了解一些系统架构设计相关的基础知识,实现一定程度上的自我提升;从目的性的角度来说,通过考试,可以在一
14972 4
软考高级系统架构设计师通关经验分享
|
Java 持续交付 数据库
避免服务分层污水池反模式
【6月更文挑战第30天】本文介绍污水池反模式,分层架构在敏捷性、部署性和性能方面得分较低,但具有高测试性和易开发性。关键在于合理分层以降低耦合和提高解耦效果。
621 1
避免服务分层污水池反模式
|
9月前
|
缓存 自然语言处理 安全
快速调用 Deepseek API!【超详细教程】
Deepseek 强大的功能,在本教程中,将指导您如何获取 DeepSeek API 密钥,并演示如何使用该密钥调用 DeepSeek API 以进行调试。
|
10月前
|
JSON Cloud Native API
API 规范和设计
今天主要和大家分享的是如何给予 Open API 3.0 标准来设计一套 API 规范。那么整体我们在讲的过程中,大约有以下五方面。 1. 大环境介绍 2. API与服务开放 3. API定义 4. 模型 5. 总结
998 5
|
Java 数据库 关系型数据库
优秀的代码都是如何分层的?
好的应用分层应该做到1.方便后续代码进行维护扩展;2.分层的效果需要让整个团队都接受;3.各个层职责边界清晰。本文针对controller,service, mapper三个维度的应用分层进行整理,以优化后续代码的维护
10493 0
|
存储 前端开发 API
DDD领域驱动设计实战-分层架构
DDD分层架构通过明确各层职责及交互规则,有效降低了层间依赖。其基本原则是每层仅与下方层耦合,分为严格和松散两种形式。架构演进包括传统四层架构与改良版四层架构,后者采用依赖反转设计原则优化基础设施层位置。各层职责分明:用户接口层处理显示与请求;应用层负责服务编排与组合;领域层实现业务逻辑;基础层提供技术基础服务。通过合理设计聚合与依赖关系,DDD支持微服务架构灵活演进,提升系统适应性和可维护性。
1200 10
|
开发者
如何画业务架构图
如何快速上手画业务架构图
11311 2