分层架构设计模式总结-MVC,洋葱架构,整洁架构,六边形架构,DDD等等
一、单层结构不分层
最开始开发项目时,由于需求较少,用一个单独的工程文件就可以满足开发的需求了,不需要进行划分。
二、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 架构、六边形架构和洋葱架构的肩膀上的架构。

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

十、参考
- https://jeffreypalermo.com/2008/07/the-onion-architecture-part-1/
- https://herbertograca.com/2017/07/03/the-software-architecture-chronicles/
- https://herbertograca.com/2017/09/07/domain-driven-design/
- https://blog.8thlight.com/uncle-bob/2012/08/13/the-clean-architecture.html
- https://www.jianshu.com/p/d87d5389c92a 洋葱架构(译)
- https://www.jianshu.com/p/395814410cf5 EBI 架构(译)
分层架构设计模式总结-MVC,洋葱架构,整洁架构,六边形架构,DDD等等的更多相关文章
- MVC到底是设计模式还是一种框架还是一种架构? https://www.zhihu.com/question/31079945
		具体知乎讨论内容:https://www.zhihu.com/question/31079945 MVC到底是设计模式还是一种框架还是一种架构? 我认为它是3种设计模式的演变和组合:观察者模式(Obs ... 
- iOS 架构模式--解密 MVC,MVP,MVVM以及VIPER架构
		本文由CocoaChina译者lynulzy(社区ID)翻译 作者:Bohdan Orlov 原文:iOS Architecture Patterns 在 iOS 中使用 MVC 架构感觉很奇怪? 迁 ... 
- 朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下)
		朱晔的互联网架构实践心得S1E8:三十种架构设计模式(下) [下载本文PDF进行阅读] 接上文,继续剩下的15个模式. 数据管理模式 16.分片模式:将数据存储区划分为一组水平分区或分片 一直有一个说 ... 
- 架构模式:MVC与MVVM
		本文探讨如下几个问题: 什么是MVC 什么是MVVM MVC与MVVM对架构属性的影响 MVC实例SpringMVC MVVM实例Vue MVC.MVVM与Layer中的Model,Controlle ... 
- iOS - 架构模式 - 解密 MVC、MVP、MVVM、VIPER架构
		在 iOS 中使用 MVC 架构感觉很奇怪? 迁移到MVVM架构又怀有疑虑?听说过 VIPER 又不确定是否真的值得切换? 相信你会找到以上问题的答案,如果没找到请在评论中指出. 你将要整理出你在 i ... 
- 腾讯T8纯手写66个微服务架构设计模式,全部学会真的“变强”了
		微服务的概念虽然直观易懂,但“细节是魔鬼”,微服务在实操落地的环节中存在诸多挑战.我们在为企业提供PaaS.人工智能.云原生平台等数字化转型解决方案时也发现,企业实现云原生,并充分利用PaaS能力的第 ... 
- 同事跳槽阿里P7,甩我一份微服务架构设计模式文档,看完我也去
		给所有微服务架构开发者的忠告,我想对你们说: 第一,要记住微服务不是解决所有问题的万能“银弹”. 第二,编写整洁的代码和使用自动化测试至关重要,因为这是现代软件开发的基础. 第三,关注微服务的本质,即 ... 
- 如何结合整洁架构和MVP模式提升前端开发体验 - 整体架构篇
		本文不详细介绍什么是整洁架构以及 MVP 模式,自行查看文章结尾相关链接文章. 整洁架构粗略介绍 下图为整洁架构最原始的结构图: Entities/Models:实体层,官方说法就是封装了企业里最通用 ... 
- MVC项目实践,在三层架构下实现SportsStore,从类图看三层架构
		在"MVC项目实践,在三层架构下实现SportsStore-02,DbSession层.BLL层"一文的评论中,博友浪花一朵朵建议用类图来理解本项目的三层架构.于是就有了本篇: I ... 
- Magento架构分析,Magento MVC 设计分析
		Magento架构分析,Magento MVC 设计分析 分类:Magento 标签:Magento MVC.Magento架构 669人浏览 Magento 采用类似 JAVA的架构,其扩展与稳定性 ... 
随机推荐
- [转帖]Tiup 常用运维操作命令干货
			https://zhuanlan.zhihu.com/p/356031031 **导读**> 作者:杨漆> 16年关系型数据库管理,从oracle 9i .10g.11g.12c到Mysq ... 
- iptables 命令学习
			iptables 命令学习 摘要 Linux 早起版本使用netfilter进行数据包过滤. 最新的版本开始改用 ebpf的方式进行内核编程式的包过滤. netfilter 可以理解为内核态的一个处理 ... 
- 部分操作系统不支持 zip unzip 大于4G的文件.
			https://www.ibm.com/mysupport/s/question/0D50z00006PD9XXCA1/bad-zipfile-offset-local-header-sig-erro ... 
- MYSQL使用mydumper备份恢复操作简介
			MYSQL使用mydumper备份恢复操作简介 1. 环境准备 第一步是进行下载安装包的操作. 在github以及官网上面有相关的安装介质. 官网为: http://www.mydumper.org/ ... 
- Spring 应用合并之路(一):摸石头过河 | 京东云技术团队
			公司在推进降本增效,在尝多种手段之后,发现应用太多,每个应用都做跨机房容灾部署,则最少需要 4 台机器(称为容器更合适).那么,将相近应用做一个合并,减少维护项目,提高机器利用率就是一个可选方案. 经 ... 
- 最小的 $x$ 满足 $L\le x\bmod P\le R$
			设 \(G(L, R, D, P)\) 为 \(y P+L \leq x D \leq y P+R\) ,满足 \(1 \leq L \leq R<P, D<P\) ,其中 \(x\) 的 ... 
- Ant Design Vue中Table的选中详解
			<template> <a-table :columns="columns" :data-source="data" :row-selecti ... 
- C# 理解委托与事件(烧水壶例子)
			引言 委托 和 事件在 .Net Framework中的应用非常广泛,然而,较好地理解委托和事件对很多接触C#时间不长的人来说并不容易.它们就像是一道槛儿,过了这个槛的人,觉得真是太容易了,而没有过去 ... 
- STM32CubeMX教程27 SDIO - 读写SD卡
			1.准备材料 正点原子stm32f407探索者开发板V2.4 STM32CubeMX软件(Version 6.10.0) keil µVision5 IDE(MDK-Arm) ST-LINK/V2驱动 ... 
- Flask 实现文件上传下载
			Flask 针对文件的上传下载相关代码片段,多种方法,包括限制文件格式,大小等. 实现图片文件上传 # name: 简单的实现文件上传任务. import os from flask import F ... 
