回头再看N层架构(图解)
不知不觉来博客园已经快两半了,时间过的真快。
这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构。
一、先来看一看传统的N层架构
N-层架构的出现,主要是由于观注点的分离而产生,这三层中BL层的职责一般比较难理清,具体请看下图.


接下来我们关注一下层间交互(分离出角色与职责以后,如何交互将成为架构或模式的主要特征)

然而在实际项目中我们也会出现这样的状况

这里存在一个反模式

二、传统的N层架构与DDD中N层架构的关系

三、分层架构的一个重要原则是:每层只能与位于其下方的层发生耦合,所以可以分为严格分层架构,如上面的图中都是。另一种是松散分层架构如下图

四、采用依赖倒置的N层架构
依赖倒置的两个原则:
1 高层模块不应该依赖于低层模块,丙都都应该依赖于抽象。
2 抽象不应该依赖于细节,细节应该依赖于抽象。

举个例子:用户接口层中定义了它需要访问的基础设施层的接口,而基础设施层只要实现这个接口就好。
对于用户接口层来说它依赖的是 它定义的基础设施层的接口。而基础设施层也依赖于这个接口。
由于使用依赖倒以后层间相互依赖于接口。实际上高层低层并不明显,相当于把整个架构都推平了。这也会后面的六边形架构
的引入奠定了基础。但这里需要注意的一点就是在依赖倒置这幅图中的用户接口的交互行为,它已经被限定了只能和应用层交互。
再来看看六边形架构

这是具有一种对称性特征的架构风格
对称性特征?=> 不同的客户将通过"平等"的方式与系统交互。
这里主要讲一下六边形架构的内部,其实是依赖倒置后有一个交互限制的松散藕合的N层架构。
简单理了一下N层架构,并顺代说了下DDD中的实现方式,完全是自己的理解,有对的肯定也有错的,希望大家多提宝贵意见。
回头再看N层架构(图解)的更多相关文章
- web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节
1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2. ...
- [译]ABP框架使用AngularJs,ASP.NET MVC,Web API和EntityFramework构建N层架构的SPA应用程序
本文转自:http://www.skcode.cn/archives/281 本文演示ABP框架如何使用AngularJs,ASP.NET MVC,Web API 和EntityFramework构建 ...
- 沉淀再出发:Spring的架构理解
沉淀再出发:Spring的架构理解 一.前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生.关于Spring,学过java的人基本上都会慢慢接触到,并且在 ...
- 前端API层架构,也许你做得还不够
上午好,今天为大家分享下个人对于前端API层架构的一点经验和看法.架构设计是一条永远走不完的路,没有最好,只有更好.这个道理适用于软件设计的各个场景,前端API层的设计也不例外,如果您觉得在调用接口时 ...
- MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解
本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格, ...
- Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式
封面:洛小汐 作者:潘潘 一直以来 他们都说为了生活 便追求所谓成功 顶级薪水.名牌包包 还有学区房 · 不过 总有人丢了生活 仍一无所获 · 我比较随遇而安 有些事懒得明白 平日里问心无愧 感兴趣的 ...
- ABP理论学习之N层架构
返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...
- ABP-N层架构
ABP理论学习之N层架构 返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析, ...
- 沉淀再出发:jetty的架构和本质
沉淀再出发:jetty的架构和本质 一.前言 我们在使用Tomcat的时候,总是会想到jetty,这两者的合理选用是和我们项目的类型和大小息息相关的,Tomcat属于比较重量级的容器,通过很多的容器层 ...
随机推荐
- 本地搭建PHP环境后进入应用失败
进入localhost/wordpress或者其他应用,直接出现类似以下这种情况: 解决方法是修改tomcat的配置文件httpd.conf中: <IfModule dir_module> ...
- (转)JavaScript中的运算符优先级
JavaScript中的运算符优先级是一套规则.该规则在计算表达式时控制运算符执行的顺序.具有较高优先级的运算符先于较低优先级的运算符执行.例如,乘法的执行先于加法. 下表按从最高到最低的优先级列出J ...
- ThinkPHP 3.2.3(三)架构之模块化设计
一.概念 应用:基于同一个入口文件访问的项目称之为一个应用. 模块:一个应用下面可以包含多个模块,每个模块在应用目录下面都是一个独立的子目录,是一个包含配置文件.函数文件和MVC文件(目录)的集合. ...
- SQL server同时删除多个表
) while exists (select name from sys.tables where name like 'se_%') begin @varname = name from sys.t ...
- 无废话SharePoint入门教程三[创建网站集和网站]
一.前言 前两篇文章讲解了什么是SharePoint,并且介绍了在SharePoint中一些常用的概念.但概念终究是概念,我们还是要脚踏实地的去动手实践.下面的文章对于了解SharePoint的人来说 ...
- Yes, Virginia, Scala is hard
首先要说的是,我是一个Scala粉丝,我作为一个Scala语言的倡导者差不多有5年历史了.我写了不少Scala语言方面的书和文章.我曾在数十个公司里做过Scala和Lift框架项目的开发.我对很多的S ...
- JAVA基础----java中E,T,?的区别?
http://825635381.iteye.com/blog/2017650 遇到<A>,<B>,<K,V>等,是用到了java中的泛型. 一般使用<T&g ...
- php 字符串转数组
$str = "你好吗"; function str($str) { $length = mb_strlen($str); for ($i=0; $i<$le ...
- 场景7 Data Guard
场景7 Data Guard 官方文档 :Oracle Data Guard Concepts and Administration 用于数据容灾,通过主备库同步(主库将redo日志传送到备库,一个 ...
- 在mac上获取iphone当前屏幕截图
xcode->windows->devices->take screenshot ![](http://o9etp0h70.bkt.clouddn.com/16-9-6/145261 ...