一、单层结构不分层

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

二、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. [转帖]TiDB的tikv节点的压缩算法

    简介:TiDB的tikv节点实用的RocksDB,RocksDB的默认压缩算法为:[no:no:lz4:lz4:lz4:zstd:zstd] RocksDB 每一层数据的压缩方式,可选的值为:no,s ...

  2. [转帖]SpringBoot项目banner.txt生成教程

    文章目录 近期在做毕业设计,后端框架用到了SpringBoot,可以自己个性化设置banner.txt 地址:https://www.bootschool.net/ascii 可以直接下载,然后直接将 ...

  3. [转帖]ubuntu下配置iptables、ufw端口转发

    iptables 端口转发(CentOS) 注意:一来一去 在中转服务器操作 iptables -t nat -A PREROUTING -p tcp --dport [端口号] -j DNAT -- ...

  4. [转帖]Linux IO调度之队列、队列深度

    有关数据结构 请求队列:struct request_queue 请求描述符:struct request 队列深度 可以在端口队列中等待IO请求数量: 具体代表其值的是request_queue的成 ...

  5. [转帖]docker编译speccpu2017

    实验步骤: 1.下载docker和speccpu2017 2.docker下载镜像,创建容器 3.将下载的宿主机speccpu2017拷贝到docker创建的容器中(docker cp) 4.在doc ...

  6. [转帖]awk命令 去掉重复行

    https://developer.aliyun.com/article/885946?spm=a2c6h.24874632.expert-profile.263.7c46cfe9h5DxWK lin ...

  7. [转帖]总结:nginx502:Tomcat调优之acceptCount

    问题背景:UI页面点击会偶尔返回error,检查调用日志,发现nginx报502报错,因此本文即排查502报错原因. 如下红框可知,访问本机个备机的服务502了,用时3秒左右(可见并不是超时) 先给出 ...

  8. R2M分布式锁原理及实践

    作者:京东科技 张石磊 1 案例引入 名词简介: 资源:可以理解为一条内容,或者图+文字+链接的载体. 档位ID: 资源的分类组,资源必须归属于档位. 问题描述:当同一个档位下2条资源同时审批通过时, ...

  9. SpringBoot中Bean的条件装配

    目录 概述 Profile Conditional ConditionalOn ConditionalOnProperty 概述 众所周知,SpringBoot最腻害的地方就是容器,开发人员的日常工作 ...

  10. echarts中坐标与标签刻度对齐

    xAxis: { data: ["土地.房屋及建筑物", "遇用设备", "遇用设备", "裤子", "家具. ...