不知不觉来博客园已经快两半了,时间过的真快。

  这次的目标是再回顾一下传统的N层架构并且分析一下在DDD中的N层架构。

一、先来看一看传统的N层架构 

 N-层架构的出现,主要是由于观注点的分离而产生,这三层中BL层的职责一般比较难理清,具体请看下图.

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

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

这里存在一个反模式

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

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

四、采用依赖倒置的N层架构

依赖倒置的两个原则:

    1 高层模块不应该依赖于低层模块,丙都都应该依赖于抽象。

    2 抽象不应该依赖于细节,细节应该依赖于抽象。

举个例子:用户接口层中定义了它需要访问的基础设施层的接口,而基础设施层只要实现这个接口就好。

对于用户接口层来说它依赖的是 它定义的基础设施层的接口。而基础设施层也依赖于这个接口。

由于使用依赖倒以后层间相互依赖于接口。实际上高层低层并不明显,相当于把整个架构都推平了。这也会后面的六边形架构

的引入奠定了基础。但这里需要注意的一点就是在依赖倒置这幅图中的用户接口的交互行为,它已经被限定了只能和应用层交互。

再来看看六边形架构

这是具有一种对称性特征的架构风格

对称性特征?=> 不同的客户将通过"平等"的方式与系统交互。

这里主要讲一下六边形架构的内部,其实是依赖倒置后有一个交互限制的松散藕合的N层架构。

简单理了一下N层架构,并顺代说了下DDD中的实现方式,完全是自己的理解,有对的肯定也有错的,希望大家多提宝贵意见。

回头再看N层架构(图解)的更多相关文章

  1. web前端体系-了解前端,深入前端,架构前端,再看前端。大体系-知识-小细节

    1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-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构建 ...

  3. 沉淀再出发:Spring的架构理解

    沉淀再出发:Spring的架构理解 一.前言 在Spring之前使用的EJB框架太庞大和重量级了,开发成本很高,由此spring应运而生.关于Spring,学过java的人基本上都会慢慢接触到,并且在 ...

  4. 前端API层架构,也许你做得还不够

    上午好,今天为大家分享下个人对于前端API层架构的一点经验和看法.架构设计是一条永远走不完的路,没有最好,只有更好.这个道理适用于软件设计的各个场景,前端API层的设计也不例外,如果您觉得在调用接口时 ...

  5. MySQL基础篇(05):逻辑架构图解和InnoDB存储引擎详解

    本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格, ...

  6. Mybatis系列全解(七):全息视角看Dao层两种实现方式之传统方式与代理方式

    封面:洛小汐 作者:潘潘 一直以来 他们都说为了生活 便追求所谓成功 顶级薪水.名牌包包 还有学区房 · 不过 总有人丢了生活 仍一无所获 · 我比较随遇而安 有些事懒得明白 平日里问心无愧 感兴趣的 ...

  7. ABP理论学习之N层架构

    返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析,这些找不到demo的同学,很可 ...

  8. ABP-N层架构

    ABP理论学习之N层架构   返回总目录 自从写这个系列博客之后,发现很多园友还是希望有个直接运行的demo,其实在github上就有官方的demo,我直接把这demo的链接放到这里吧,另外,我分析, ...

  9. 沉淀再出发:jetty的架构和本质

    沉淀再出发:jetty的架构和本质 一.前言 我们在使用Tomcat的时候,总是会想到jetty,这两者的合理选用是和我们项目的类型和大小息息相关的,Tomcat属于比较重量级的容器,通过很多的容器层 ...

随机推荐

  1. sass1:

    less在处理CSS动画时,非常恶心,决定转向sass了.sass诞生得比less早,只是因为它是ruby写的,因此受众面够少.但我们不需要自己下编译器或使用命令行,我们可以koala这神器 首先几个 ...

  2. SQL Server数据库脚本备份与还原

    use[master]go /*完整--备份* backup 备份 * disk='E:\USERDB.bak' 磁盘,备份文件存放的路径* name='user' 备份显示的文件名称,可随意修改* ...

  3. 单例模式(singleton)

    什么是单例模式:(singleton) 单例模式的意图是类的对象成为系统中唯一的实例,提供一个访问点,供客户类共分享资源 单例类,必须提供一个接入点(特殊的类方法) // SingletonTools ...

  4. nodeType的意思

    nodeType是用来获得当前节点对象的类型.nodeType 属性可返回节点的类型.元素element   1   属性attr   2   文本text   3   注释comments   8 ...

  5. 关于/usr/local/lib/libz.a(zutil.o): relocation R_X86_64_32 against `.rodata.str1.1' can not be used when making a shared object; recompile with -fPIC解决办法

    具体报错截图如下: 解决方法: 题外话,我对makefill cmake也是一窍不通因此本人也是不想去积极的解决这个问题,但是当你求助无缘的时候你才会静心去思考.读到这句话的时候也许你已经发现了问题所 ...

  6. Linux版Matlab R2015b的bug——脚本运行的陷阱(未解决)

    0 系统+软件版本 系统:CentOS 6.7 x64, 内核 2.6.32-573.el6.x86_64软件:Matlab R2015b(包括威锋网和东北大学ipv6下载的资源,都测试过) 1 脚本 ...

  7. MEAN.JS入门

    MEAN stands for: 下载:MongoDB下载文件 百度盘共享 运行命令:mongod 提示你dbpath(/data/db/) does not exist, terminating 创 ...

  8. centos7 jexus在vmware下能访问,主机访问不了解决方案

    能PING通,访问不了web,先在CMD测试telnet ip 80看看是否是防火墙的问题. 修改防火墙,打开指定端口 1 安装iptables [root@centos ~]# yum instal ...

  9. MS SQL提示列名 'Y' 无效的原因及解决办法

    在作项目写MS SQL 存储过程时,需拼接SQL语句字符串,其中有单字符变量,如下图: 如上图执行存储过程是提示“列名‘Y’无效”.经反复测试,原因在用单字符变量连接SQL字符串是必须在引用变量前后各 ...

  10. Linux学习 :移植linux-4.7.4到JZ2440开发板

    一.编译环境搭建: 1.linux源码下载:https://www.kernel.org/2.安装交叉编译工具链: ①手动下载配置工具链: (1):解压 arm-linux-gcc-3.4.1.tar ...