当前位置:首页 > 科技  > 软件

你的项目应该如何正确分层?你会吗?

来源: 责编: 时间:2024-03-29 09:21:43 297观看
导读谈到应用程序的分层架构,很多人首先想到的是一个标准的模型,包括控制器(Controller)、服务层(Service)和数据访问层(Mapper)三个主要部分。这听起来似乎很直观和简单,但实际上,很多开发者在实施时并没有明确区分这些层次的具体

谈到应用程序的分层架构,很多人首先想到的是一个标准的模型,包括控制器(Controller)、服务层(Service)和数据访问层(Mapper)三个主要部分。这听起来似乎很直观和简单,但实际上,很多开发者在实施时并没有明确区分这些层次的具体职责。例如,一些项目中,控制器层的代码量反而超过了服务层,而服务层仅仅作为一个传输介质,这反映了开发过程中容易被忽视的问题。这种模糊的层级职责划分,最终可能导致架构的混乱,使得代码难以复用和维护7yI28资讯网——每日最新资讯28at.com

如何进行分层

一个好的应用分层需要具备以下几点:7yI28资讯网——每日最新资讯28at.com

方便后续代码进行维护扩展;7yI28资讯网——每日最新资讯28at.com

分层的效果需要让整个团队都接受;7yI28资讯网——每日最新资讯28at.com

各层的职责边界清晰。7yI28资讯网——每日最新资讯28at.com

图片图片7yI28资讯网——每日最新资讯28at.com

阿里巴巴的编码规范细化了应用程序架构的多个层次,旨在更清楚地界定各层的职责和作用。这些层次包括:7yI28资讯网——每日最新资讯28at.com

开放接口层:这一层负责将服务层的功能通过RPC接口或HTTP接口向外暴露,同时负责网关的安全和流量控制。7yI28资讯网——每日最新资讯28at.com

终端显示层:负责在各种客户端上渲染和显示信息,使用不同的技术如Velocity、JavaScript、JSP进行页面渲染和移动端展示。7yI28资讯网——每日最新资讯28at.com

Web层:处理访问控制和转发,进行基本的参数校验和一些不需要复用的简单业务处理。7yI28资讯网——每日最新资讯28at.com

服务层(Service层):执行更具体的业务逻辑处理。7yI28资讯网——每日最新资讯28at.com

管理层(Manager层):作为一个通用业务处理层,具备三个主要功能:封装对第三方平台的调用、下沉Service层的通用能力(如缓存和中间件处理)、以及与数据访问层(DAO层)的交互,实现对数据访问对象的复合使用。7yI28资讯网——每日最新资讯28at.com

数据访问层(DAO层):直接与数据库(如MySQL、Oracle、Hbase)进行交互的层级。7yI28资讯网——每日最新资讯28at.com

优化分层

首先需要说明的是,如果 RPC 框架选用 Thrift,可能会比其他的 RPC 框架多出一层,作用和 Controller 层类似:7yI28资讯网——每日最新资讯28at.com

图片图片7yI28资讯网——每日最新资讯28at.com

阿里巴巴的架构分层规范中,最顶层由 Controller 和 TService 构成,主要职责是处理轻量级的业务逻辑、进行参数验证和异常管理。7yI28资讯网——每日最新资讯28at.com

这一层设计的目的是保持足够的灵活性,以便在需要时可以方便地更改或替换接口类型,因此这里的业务逻辑应尽可能简化,有时甚至可以避免实现具体逻辑。7yI28资讯网——每日最新资讯28at.com

紧接着的是 Service 层,承担着具体的业务逻辑处理。在这个层级,建议采取一种方法:让每一个 Controller 操作都对应一个 Service 方法。7yI28资讯网——每日最新资讯28at.com

这样做的好处是避免将业务逻辑的编排混入 Controller 层,从而在将来需要接入其他接口类型,如 Thrift 时,可以避免重复编排业务逻辑,减少代码的重复和维护成本。这种方法强调了在不同层之间保持清晰的职责分离,以提高代码的可维护性和可扩展性。7yI28资讯网——每日最新资讯28at.com

图片图片7yI28资讯网——每日最新资讯28at.com

这样大量的重复工作必定会导致开发效率下降,所以你要把业务编排逻辑都放进 Service 层中。7yI28资讯网——每日最新资讯28at.com

图片图片7yI28资讯网——每日最新资讯28at.com

接下来是 Manager 层,这一层充当了可复用逻辑的核心角色。在这个层面上,Manager 可以是负责单一功能的服务,如缓存(Cache)、消息队列(MQ)等;同时,它也能够处理更复杂的任务,比如当需要同时调用多个 Manager 服务时,可以将它们组合成一个综合性的 Manager,以处理更为复杂的业务逻辑,如在逻辑上进行类似于数据库连表查询的操作。7yI28资讯网——每日最新资讯28at.com

再来看 DAO 层,这是数据库访问层。主要负责“操作数据库的某张表,映射到某个 Java 对象”,DAO 应该只允许自己的 Service 访问。7yI28资讯网——每日最新资讯28at.com

在阿里巴巴的编码规范中,分层领域模型的转换是一个关键的设计考虑,以确保数据在不同层之间传递时的清晰性和准确性。以下是一些核心领域模型及其用途的概述:7yI28资讯网——每日最新资讯28at.com

DO(Data Object):数据对象,直接与数据库表结构对应,通过 DAO(数据访问对象)层传输数据源对象。这确保了数据层与数据库的直接映射,便于操作数据库。7yI28资讯网——每日最新资讯28at.com

DTO(Data Transfer Object):数据传输对象,用于服务层或管理层向外部传输的对象。DTO 主要用于跨层通讯,封装了需要传输的数据,有助于减少一个方法调用所需要传递的参数数量,简化远程接口调用。7yI28资讯网——每日最新资讯28at.com

BO(Business Object):业务对象,由服务层输出,封装了业务逻辑的对象。BO 体现了业务模型的概念,通常用于封装具体的业务逻辑和业务状态,反映了业务操作的结果。7yI28资讯网——每日最新资讯28at.com

AO(Application Object):应用对象,位于 Web 层与服务层之间,是一个抽象的复用对象模型,非常贴近于展示层但复用度不高。AO 主要用于处理特定于应用的逻辑和状态,作为不同服务层之间数据传输的中间层。7yI28资讯网——每日最新资讯28at.com

VO(View Object):视图对象,通常由 Web 层传输至模板渲染引擎层的对象。VO 主要用于展示层数据的封装,专门为用户界面定制,包含了用户界面展示所需的数据。7yI28资讯网——每日最新资讯28at.com

Query:数据查询对象,用于在各层之间传递查询请求。它允许将查询条件封装为一个对象,使得方法调用更加清晰,同时避免了使用诸如 Map 这类无结构的数据类型来传递多个查询条件,提高了代码的可读性和可维护性。7yI28资讯网——每日最新资讯28at.com

图片图片7yI28资讯网——每日最新资讯28at.com

每一个层基本都有自己对应的领域模型,而有些人过于追求每一层都用自己的领域模型,这就导致在一次请求中,出现多次对象转换。7yI28资讯网——每日最新资讯28at.com

一个折中的方案是:7yI28资讯网——每日最新资讯28at.com

允许 Service/Manager 可以操作数据领域模型。7yI28资讯网——每日最新资讯28at.com

Controller/TService 层的领域模型不允许传入 DAO 层,这样就不符合职责划分了。7yI28资讯网——每日最新资讯28at.com

同理,不允许 DAO 层的数据传入到 Controller/TService。7yI28资讯网——每日最新资讯28at.com

本文链接:http://www.28at.com/showinfo-26-80339-0.html你的项目应该如何正确分层?你会吗?

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。邮件:2376512515@qq.com

上一篇: 前端如何请求后端数据?有哪些方法可以实现?

下一篇: 消息队列的七种经典应用场景

标签:
  • 热门焦点
  • MIX Fold3包装盒泄露 新机本月登场

    小米的全新折叠屏旗舰MIX Fold3将于本月发布,近日该机的真机包装盒在网上泄露。从图上来看,新的MIX Fold3包装盒在外观设计方面延续了之前的方案,变化不大,这也是目前小米旗舰
  • 直屏旗舰来了 iQOO 12和K70 Pro同台竞技

    旗舰机基本上使用的都是双曲面屏幕,这就让很多喜欢直屏的爱好者在苦等一款直屏旗舰,这次,你们等到了。据博主数码闲聊站带来的最新爆料称,Redmi下代旗舰K70 Pro和iQOO 12两款手
  • 从 Pulsar Client 的原理到它的监控面板

    背景前段时间业务团队偶尔会碰到一些 Pulsar 使用的问题,比如消息阻塞不消费了、生产者消息发送缓慢等各种问题。虽然我们有个监控页面可以根据 topic 维度查看他的发送状态,
  • 最“俊美”淘宝卖家,靠直播和短视频圈粉,上架秒光,年销3000万

    来源 | 电商在线文|易琬玉编辑|斯问受访店铺:Ringdoll戒之人形图源:微博@御座的黄山、“Ringdoll戒之人形”淘宝店铺有关外貌的评价,黄山已经听累了。生于1985年的他,哪
  • 10天营收超1亿美元,《星铁》比《原神》差在哪?

    来源:伯虎财经作者:陈平安即便你没玩过《原神》,你一定听说过的它的大名。恨它的人把《原神》开服那天称作是中国游戏史上最黑暗的一天,有粉丝因为索尼在PS平台上线《原神》,怒而
  • ESG的面子与里子

    来源 | 光子星球撰文 | 吴坤谚编辑 | 吴先之三伏大幕拉起,各地高温预警不绝,但处于厄尔尼诺大“烤”之下的除了众生,还有各大企业发布的ESG报告。ESG是“环境保
  • 小米汽车电池信息疑似曝光:容量101kWh,支持800V高压快充

    7月14日消息,今日一名博主在社交媒体发布了一张疑似小米汽车电池信息的照片,显示该电池包正是宁德时代麒麟电池,容量为101kWh,电压为726.7V,可以预测小
  • 2纳米决战2025

    集微网报道 从三强争霸到四雄逐鹿,2nm的厮杀声已然隐约传来。无论是老牌劲旅台积电、三星,还是誓言重回先进制程领先地位的英特尔,甚至初成立不久的新
  • 支持aptX Lossless无损传输 iQOO TWS 1赛道版发布限时优惠价369元

    2023年7月4日,“无损音质,声动人心”iQOO TWS 1正式发布,支持aptX Lossless无损传输,限时优惠价369元。iQOO TWS 1耳机率先支持端到端aptX Lossless无
Top