项目架构实战:分层架构规范的Demo以及微服务架构的演进

微服务(一)—— 项目结构 Spring Cloud一、Spring Cloud二、项目目录结构1.创建Maven父工程 一、Spring Cloud 在说微服务之前先简单的说一下Spring Cloud框架,看官网介绍Spring Cloud. Spring Cloud Overview Spring Cloud provides tools for developers to quickly build some of the common patterns in distributed systems (e.g. 阅读详情

请先参考

项目架构规范:阿里规约,MVC架构以及三层架构(一)

https://blog.csdn.net/lin451791119/article/details/106348414

项目架构规范:阿里规约,MVC架构以及三层架构(二)

https://blog.csdn.net/lin451791119/article/details/106378277

项目架构规范:阿里规约,MVC架构以及三层架构(三)

https://blog.csdn.net/lin451791119/article/details/106396958

分层目录要点

  1. 严格区分每层的职责
  2. 严格确定分层的调用链路
  3. 严禁使用map/json等格式做数据传递
  4. 严禁使用BeanUtil.Copy等方法转换

分层目录结构

总体分为应用层、业务领域层和基础设施层

 

应用层

应用层用于接收外部的请求,是整个系统所提供能力的外观,包含API、MQ-Listener等。专用于处理和业务无关的操作,包含验签、参数校验、拦截等处理,不实现业务逻辑通过编排业务领域和外部请求,对外提供细粒度的能力

  • API:接收来自外部的HTTP请求,只做参数校验、业务领域数据组装、业务逻辑编排和响应请求
  • MQ:监听消息队列的请求,不做业务处理
  • Model:用于封装外部的请求参数、封装响应外部参数,与底层数据存储的结构完全无关
  • Assembler:用于Model与业务领域层的Model之间的相互转换工作,例如:使用反射机制自动beanutils相互转换
  • Configuration:全局的配置信息或处理,例如:全局参数校验机制、全局异常处理等

业务领域层

业务领域层主要用于实现业务逻辑,包含业务规则、策略和流程

  • Model:用于接收或响应来自应用层的业务属性,同时可承载Model的行为避免失血模型。业务层只负责业务,与具体的表现形式无关,所以它返回的Model不应该出现与表现形式的耦合。
  • Repository:仓储层用于对持久化通用操作的封装,将领域对象持久化,屏蔽了持久化层的特性
  • Service:处理业务逻辑,对Repository和External的操作编排
  • External:封装对外部的请求,包含了请求的定义、参数等

基础设施层

基础设施层为以上各层提供技术支持,例如持久化操作、公用的操作等

  • Commons:共用的操作类、工具类等
  • Persistence:直接面向DB的操作

命名规范

名称描述所属分层示例备注
Client Request客户端请求入参对象Facade.modelUserRequest 
Client Response客户端请求响应对象Facade.modelUserResponse 
Domain Object领域对象Biz.domainUserDomain 
Value Object值对象Biz.domainUserVO 
Domain Factory领域工厂Biz.domainUserFactory创建Domain Object
Repository仓库Biz.domainUserRepository对Domain Object的持久化
Service业务逻辑Biz.serviceUserService处理业务逻辑
External Request请求外部对象Biz.external.modelUserExtRequest请求外部接口的入参
External Response请求外部对象Biz.external.modelUserExtResponse接收外部接口的响应
Data Object数据库对象Infrastructure.persistence.entityUser 
Dao Object数据库操作对象Infrastructure.persistence.mapperUserMapper 

为什么要分出这个external这个包,是为了以后向微服务架构转型,尤其是Spring+Feign,会带来极大的便利!如果请求远程的服务和服务器提供的服务混杂在一起,整理项目的时候会十分混乱!

分层调用路径

 

目标所属层操作备注
Client RequestDomain ObjectDomain.factory 
Domain ObjectData ObjectDomain.Repository意味着Domain Object可以出现在Factory、Service和Repository层
Domain ObjectClient ResponseFacade.api拿到业务层的返回的Domain Object后,转换成客户端能识别的Client Response
Java包命名规范:从核心原则到分层架构实战 包(Package)作为Java语言组织代码的核心机制,通过命名空间管理实现了代码的模块化与访问控制。其设计原理基于互联网域名的全球唯一性,采用逆序域名约定来确保包名的唯一归属,这是Java生态体系的重要基石。在工程实践中,良好的包命名规范能显著提升代码的可读性、可维护性,并有效避免依赖冲突。无论是开发单体应用、微服务,还是对外提供SDK,遵循统一的包结构设计都是保障团队协作效率和软件质量的关键。本文将结合分层架构领域驱动设计(DDD)等具体应用场景,深入探讨包命名的最佳实践,并分享如何利用Checkst 阅读详情

相关推荐

SpringBoot3微服务电商架构实战:谷粒商城全流程解析

微服务架构通过将单体应用拆分为多个松耦合的服务,实现了系统的高可用与弹性扩展。其核心原理包括服务注册发现、API网关和分布式配置管理等组件协同工作,特别适合电商等高并发场景。SpringBoot3作为微服务开发的主流框架,提供了GraalVM原生镜像支持和响应式编程增强等新特性。以谷粒商城项目为例,该项目采用DDD领域驱动设计,实现了商品管理、订单处理等完整电商功能链,其中多级缓存策略和Saga分布式事务模式有效解决了高并发与数据一致性问题。通过容器化部署和Istio服务网格集成,展示了现代云原生电商系统的

weixin_30439067的博客 576

阿里巴巴分层应用架构实践

分层架构是《阿里巴巴Java开发手册》推荐使用的一种面向数据模型的架构风格,默认上层依赖于下层,例如Web层依赖Service层、Service层又依赖DAO层,在垂直业务领域能够满足单一职责原则,通过Maven多模块化的开发模式,可以帮助降低复杂应用场景的系统熵值,提升系统开发和运维效率。

梦想歌的技术博客 1188

提示工程架构师进阶:用微服务思想设计可持续演进的AI提示系统

遵循“API契约优先”原则,用OpenAPI/Swagger定义接口规范。请求参数"order_id": "string", // 必选,订单ID"user_id": "string", // 可选,用户ID(用于获取用户画像)"query_type": "string" // 必选,查询类型:"status"(状态)/"logistics"(物流)响应参数"prompt": "string", // 生成的提示词"request_id": "string", // 请求唯一ID(用于追踪)

AI开发架构师 995

阿里巴巴java开发手册详解-工程结构 - (一) 应用分层

(一) 应用分层 1、【推荐】图中默认上层依赖于下层,箭头关系表示可直接依赖,如:开放接口层可以依赖于 Web 层,也可以直接依赖于 Service 层,依此类推: 开放接口层:可直接封装 Service 方法暴露成 RPC 接口;通过 Web 封装成 http 接口;进行网关安全控制、流量控制等。 终端显示层:各个端的模板渲染并执行显示的层。当前主要是 velocity 渲染,JS 渲染, JSP 渲染,移动端展示等。 Web 层:主要是对访问控制进行转发,各类基本参数校验,或者不复用的业务简单处理等

winne的博客 992

微服务架构设计规范

一、项目系统服务约定 1、项目工作空间(项目集) 项目工作空间系统源码根目录,一般以项目名称做为工作空间,例如:iToken 注:项目按前后端分离设置,项目工作空间可以进一步划分,后端项目工作空间以项目名称,前端项目工作空间以项目名称-web。 示例: iToken:项目工作空间 |__itoken:后端项目工作空间 |__itoken-web:前端项目工作空间 2、后端项目服务规划 2.1、服务命名 xx-xx/xx-xx-xx 项目名-模块名/项目名-模块名-二级模块名 大小写:全部小写,单词间

tangyb828的博客 4009

JAVA项目的目录结构分析

一般来说,JAVA项目最终上线都是以JAR或者WAR的形式发布 WAR的话据

三也_攻城狮 1万+

SpringBoot毕设项目避坑指南:从单体架构到可维护工程的实战演进

很多同学会问,学校教的是SSM(Spring+SpringMVC+MyBatis),为什么毕设推荐用SpringBoot?传统SSM:需要手动配置大量的XML文件(如),整合过程繁琐,依赖冲突让人头疼,启动需要一个外部的Tomcat服务器。SpringBoot:核心优势是“约定大于配置”和“内嵌容器”。开箱即用:通过starter依赖,几乎零配置就能集成Web、数据库、缓存等常用组件。内嵌Tomcat/Undertow:项目打包成一个可执行的JAR文件,java -jar。

2600_94959829的博客 624

ModelEngine/app-platform:架构演进与重构

在AI应用开发领域,大模型技术的快速发展带来了前所未有的机遇,同时也带来了巨大的架构挑战。传统的单体架构难以应对复杂的模型编排、插件管理和可视化开发需求。ModelEngine/app-platform项目正是在这样的背景下应运而生,通过持续的架构演进和重构,构建了一个面向大模型应用开发的全栈式工程平台。 > **读完本文你将获得:** > - ModelEngine/app-platform的...

gitblog_00857的博客 970

SpringBoot微服务目录结构指南

这篇文章探讨了项目目录架构的重要性,对比了传统SpringMVC三层架构与清晰分层架构的差异。传统架构存在代码臃肿、职责混淆等问题,而清晰分层架构通过模块化设计(如api、service等模块)实现了更好的代码组织和职责划分。文章详细说明了分层架构的目录结构、调用流程和开发规范,并以订单导入业务为例展示了其优势,包括提高可维护性、降低耦合度等。最后对比了两种架构的差异,突显了分层架构的优越性。

weixin_42088970的博客 456

Java架构从单体到微服务历程

单体架构Java应用最基础、最原始的架构模式,核心特征是“所有业务模块打包为一个独立的部署单元”。具体来说,就是将前端页面、后端业务逻辑(如用户模块、订单模块、商品模块)、数据访问层(DAO)、数据库连接等所有功能,都集成在一个WAR/JAR包中,部署到单个Tomcat、Jetty等Web容器中,最终连接一个数据库。Java架构从单体到微服务演进,是“业务复杂度→架构复杂度”的正向匹配过程:单体架构(简单业务)→ 模块化拆分(内部解耦)→ 垂直拆分(业务维度解耦)→ 微服务(复杂分布式业务)

2503_92804185的博客 721

基于Spring Cloud Alibaba构建微服务架构的实践探索

本文介绍了基于Spring Cloud Alibaba技术栈构建微服务架构的实践。项目采用Spring Boot 3.2.4和Spring Cloud Alibaba 2023.0.1.0,通过Nacos实现服务注册与配置管理,利用OpenFeign进行服务间通信,并结合MyBatis-Plus完成数据持久化。文章详细阐述了多模块工程结构设计、核心组件协作流程及关键技术实现,包括服务注册发现、声明式调用和数据库访问层实现。同时总结了实践中的常见问题及解决方案,并展望了后续的高可用架构演进方向。

体系化很难,碎片归纳很简单。 996

Golang微服务框架居然可以开发单体应用?—— Kratos单体架构实践

摘要 本文探讨了使用Go微服务框架Kratos开发单体架构应用的可行性与实践。作者通过一个DEMO项目(kratos-monolithic-demo)展示了微服务框架在单体应用中的最小化实践,包括: 工程化工具链(Make/Wire/Buf)的使用 完整开发流程(从Protobuf定义到CURD实现) 认证授权等核心功能实现 文章分析了中小型项目采用微服务框架的合理性:统一技术栈、渐进式架构演进、强异构环境适配等优势。该项目结构清晰,包含前后端代码,特别适合作为学习微服务框架的入门案例。 关键工具链涉及Wi

喵个咪的专栏 762

架构规范

系统架构规范目录一、架构规范二、数据库规范三、SOA规范四、安全规范 目录 一、架构规范 所有的输入参数需要做合法性检验; 不允许出现空指针异常和数组越界异常; 不允许出现不受控制的大对象,如没有限定大小的本地缓存,或者没有限定大小的数据库结果集; 避免系统串联,对任何资源的依赖都要考虑该资源失败后的降级处理,包括缓存,数据库,Service 等; 系统需要做容量规划,对超限的请求主动失败,并告知原因; 所有的远程调用需要设置超时时间; 如果循环的次数由用户输入,一定要限制最大循环次数; 对于非核心特性

极地星辰 706

一般Web典型的项目目录结构

转自:http://blog.sina.com.cn/s/blog_4758a28b0100l3lp.html WebRoot-        -common   (系统框架公用jsp 如footer.jsp,header.jsp)        -images        -scripts  (javascript库等)         -styles -          

chelen_jak的专栏 1万+

Java web项目目录结构以及作用详解

一个java web项目 目录分为两个部分 ① Web应用的根目录下子目录WEB-INF,里面内容不能被客户端访问的,包括专用Web应用程序软件,包括Servlet类文件、部署描述符web.xml、外部库以及其他任何由此应用程序使用的专用文件。 ② 所有位于WEB-INF之外的文件都被看作是公共的,客户端是可以访问到的。资源包括HTML页面、JSP页面和图像等。 一、Common包 Common用来封装一些常用的公共方法。 二、Dao包 ...

ITSM/ITIL/网络安全/IT运维 1万+

SpringBoot和SpringCloud微服务目录结构

一、SpringBoot之父子模块微服务项目,SpringBoot+Mybatis+TkMapper+Dubbo目录结构如下: 1、demo-api constant:枚举类文件 dto:request和response文件 exception:异常枚举类文件 service:对外提供接口文件 2、demo-provider config:配置文件 dal——>entity:实体类文件 dal——>persistence:mapper类文件 dal——>persistence——&

netuser1937的博客 4443

看完阿里的代码规范,立马学会代码分层,再也不会被同事怼

代码规范重要吗?很重要很重要,整洁的代码能让你和同事都心旷神怡,也能让你在离职的时候不会被骂.....今天就来讲讲优秀IT人的代码都是如何分层的。 一、背景 说起应用分层,大部分人都会认为这个不是很简单嘛 就controller,service, mapper三层。 看起来简单,很多人其实并没有把他们职责划分开,在很多代码中,controller做的逻辑比service还多,service往往当成透传了,这其实是很多人开发代码都没有注意到的地方,反正功能也能用,至于放哪无所谓呗。这样往往造成后面代码无

Leo的博客 2964

阿里开源的整洁面向对象分层架构

今天要给大家介绍一个不一般的应用架构:阿里开源的,COLA如上图所示,COLA是Clean Object-Oriented & Layered Architecture的缩写,经过版本的迭代,目前已经更新到了最新的4.0版本。COLA作为一个应用架构,其存在的主要功能在于:定义一套良好的结构;治理应用复杂度,降低系统熵值;从随心所欲的混乱状态,走向井井有条的有序状态。其主要分为两个部分组成,分别是COLA架构和COLA组件。先说说COLA架构,COLA架构的核心职责就是提供最佳应用架构的最佳实践,要达到这一

m0_67698950的博客 1745
上一篇: 使用RestTemplate的postForObject方法直接传递对象
下一篇: IDEA Java性能分析插件VisualVM Launcher 配置(JAVA VisualVM 与Jconsole配置相同)
JohnyLin37291
博客等级 码龄12年 2787粉丝 46原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值