一、单层结构不分层

最开始开发项目时,由于需求较少,用一个单独的工程文件就可以满足开发的需求了,不需要进行划分。

二、MVC 分层和三层

到后面需求越来越多,于是就把文件进行分解,怎么分解?有人提出了 MVC 的分层方式。

MVC 分层是一个 3 层结构,将整个应用划分为:

  • M:model 模型层,用于封装应用业务逻辑相关数据和对数据处理方法。
  • V:view 表现层,把数据展示给用户。
  • C:controller,控制器,把不同层组织起来,用来控制程序的流程。

最有名的框架就是 Spring MVC。Spring MVC 架构如下:

如果从业务角度来分 3 层:

  • 数据库访问层(DAO)
  • 业务逻辑层(Business)
  • 表现层(UI)

java 代码的包分层:

  • controller:控制层,输出数据到表示层
  • dao:数据库访问层,对数据库访问的操作
  • entity:model 实体层,把数据库表字段的映射到 java 代码
  • service:业务逻辑层business/服务层service,业务逻辑层上面可能还有一个服务层

在 java 项目中,一些资源会放在 resources 里,比如 js,css,html,配置文件等

  • resources

    • UI(CSS, HTML) 表示层

三、N 层架构

N 层架构是在三层架构上的进一步细分。

(www.herbertograca.com)

  • 原生浏览器应用程序,渲染和运行用户界面,向服务器应用发送请求;
  • 应用服务器,包括了展现层、应用层、领域层和持久化层;
  • 数据库服务器,应用服务器用它来完成数据的持久化。

这个由三层架构变化而来的 N 层架构,尽管用户界面是在客户浏览器渲染和运行,但是用户界面是在存于服务器上并在它上面编译,它解决了

客户端更新问题。

四、领域驱动设计DDD用到的架构

Eric Evans 于 2003 年出版了《领域驱动设计:软件核心复杂性应对之道》,在书中他创造了领域驱动设计方法

五、EBI 架构

EBI 架构(Entity-Boundary-Interactor,实体-边界-交互器)。

Ivar Jacobson 早在 1992 年就在他的著作 Object-Oriented Software Engineering: A use case driven approach中提出了这个模式。

那时,Jacobson 实际上把它叫做实体-接口-控制(Entity-Interface-Control),但是后来改成了 EBI,避免“接口”和编程语言中的结构“接口”混淆,以及“控制”和 MVC 中的控制器混淆。

六、端口和适配器架构(六边形架构)

2005年,Alistair Cockburn构思了端口和适配器架构 (又称六边形架构)并记录在他的博客中。

(www.herbertograca.com)

七、洋葱架构

2008 年 Jeffrey Palermo 提出了洋葱架构 。它在端口和适配器架构中贯彻了将领域放在应用中心。

(www.herbertograca.com)

它明确了端口和适配器中关于依赖的方向:

  • 外层依赖内层。
  • 内层对外层无感知。

耦合的方向是从外层指向中心,它提供了一个完全独立的对象模型(领域模型),该模型位于架构的核心,不依赖其它任何层次。我们拥有了在不影响内层的情况下改变外层的灵活性。

洋葱架构的关键原则:

  • 围绕独立的对象模型构建应用
  • 内层定义接口,外层实现接口
  • 依赖的方向指向圆心
  • 所有的应用代码可以独立于基础设施编译和运行

—— Jeffrey Palermo 2008, The Onion Architecture: part 3

八、整洁架构

Robert C. Martin(大名鼎鼎的 Uncle Bob)于2012年在他的一篇博客中发表了整洁架构的观点,并在一些会议上做了关于该架构的演讲。站在 EBI 架构、六边形架构和洋葱架构的肩膀上的架构。

九、清晰架构

https://herbertograca.com/2017/11/16/explicit-architecture-01-ddd-hexagonal-onion-clean-cqrs-how-i-put-it-all-together/

融合 DDD、洋葱架构、整洁架构、CQRS 等的架构。

十、参考

分层架构设计模式总结-MVC,洋葱架构,整洁架构,六边形架构,DDD等等的更多相关文章

  1. MVC到底是设计模式还是一种框架还是一种架构? https://www.zhihu.com/question/31079945

    具体知乎讨论内容:https://www.zhihu.com/question/31079945 MVC到底是设计模式还是一种框架还是一种架构? 我认为它是3种设计模式的演变和组合:观察者模式(Obs ...

  2. iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构

    本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ...

  3. 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)

    朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下) [下载本文PDF进行阅读] 接上文,继续剩下的15个模式. 数据管理模式 16.分片模式:将数据存储区划分为一组水平分区或分片 一直有一个说 ...

  4. 架构模式:MVC与MVVM

    本文探讨如下几个问题: 什么是MVC 什么是MVVM MVC与MVVM对架构属性的影响 MVC实例SpringMVC MVVM实例Vue MVC.MVVM与Layer中的Model,Controlle ...

  5. iOS - 架构模式 - 解密 MVC、MVP、MVVM、VIPER架构

    在 iOS 中使用 MVC 架构感觉很奇怪? 迁移到MVVM架构又怀有疑虑?听说过 VIPER 又不确定是否真的值得切换? 相信你会找到以上问题的答案,如果没找到请在评论中指出. 你将要整理出你在 i ...

  6. 腾讯T8纯手写66个微服务架构设计模式,全部学会真的“变强”了

    微服务的概念虽然直观易懂,但“细节是魔鬼”,微服务在实操落地的环节中存在诸多挑战.我们在为企业提供PaaS.人工智能.云原生平台等数字化转型解决方案时也发现,企业实现云原生,并充分利用PaaS能力的第 ...

  7. 同事跳槽阿里P7,甩我一份微服务架构设计模式文档,看完我也去

    给所有微服务架构开发者的忠告,我想对你们说: 第一,要记住微服务不是解决所有问题的万能“银弹”. 第二,编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础. 第三,关注微服务的本质,即 ...

  8. 如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇

    本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章. 整洁架构粗略介绍 下图为整洁架构最原始的结构图: Entities/Models:实体层,官方说法就是封装了企业里最通用 ...

  9. MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构

    在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ...

  10. Magento架构分析,Magento MVC 设计分析

    Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ...

随机推荐

  1. [转帖]Sysbench - 一种系统性能benchmark

    SysBench是一款开源的.跨平台的.模块化的.多线程的性能测试工具,通过高负载地运行在数据库上,可以执行CPU/内存/线程/IO/数据库等方面的性能测试.用于评估操作系统的性能参数. 1 sysb ...

  2. [转帖]一次SSL握手异常,我发现JDK还有发行版区别

    https://www.cnblogs.com/codelogs/p/16633704.html 原创:扣钉日记(微信公众号ID:codelogs),欢迎分享,转载请保留出处. 简介# 最近,我们一个 ...

  3. Python学习之十八_获取神通数据库所有的表数据量

    Python学习之十八_获取神通数据库所有的表数据量 背景 今天想获取一下所有数据库的表信息.但是发现神通数据库的系统表里面的表信息不正确 无法获取实际意义的表信息. 联系了下神通数据库的原厂高手. ...

  4. [转帖]python库Paramiko

    https://zhuanlan.zhihu.com/p/456447145 测试过程中经常会遇到需要将本地的文件上传到远程服务器上,或者需要将服务器上的文件拉到本地进行操作,以前安静经常会用到xft ...

  5. [转帖]QPS 最高提升 91% | 腾讯云 TKE 基于 Cilium eBPF 提升 k8s Service 性能

    https://my.oschina.net/cncf/blog/5121393   朱瑜坚,腾讯云后台工程师,主要负责腾讯云 TKE 容器网络的构建和相关网络组件的设计.开发和维护工作.张浩,腾讯云 ...

  6. [转帖]浅谈Armv8-A处理器

    https://www.elecfans.com/emb/dsp/202208291886182.html 众所周知,ARM是一家设计并授权处理器和相应IP(比如互连总线,中断处理器,图像处理器等等) ...

  7. 京东云开发者|深入JDK中的Optional

    概述:Optional最早是Google公司Guava中的概念,代表的是可选值.Optional类从Java8版本开始加入豪华套餐,主要为了解决程序中的NPE问题,从而使得更少的显式判空,防止代码污染 ...

  8. MySQL新增数据,修改数据,删除数据

    连接本地mysql语句 mysql -hlocalhost -uroot -proot DML-介绍 DML英文全称是:用来对数据库中表的数据记录进行 增 删 改 操作. 增加使用 insert 删除 ...

  9. vue和uni-app不同的类型绑定不同的类名

    vue不同的类型绑定不同的类名 第一种 <div v-for="(item, index) in list" :key="index" > < ...

  10. 华为云DTSE携手“灵康宜”构造一站式智慧健康检测云平台

    本文分享自华为云社区<华为云DTSE携手"灵康宜"构造一站式智慧健康检测云平台>,作者: HuaweiCloudDeveloper. 打破传统健康监测方式桎梏--非接触 ...