回头再看N层架构(图解)

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

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

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

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

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

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

这里存在一个反模式

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

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

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

依赖倒置的两个原则:

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

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

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

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

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

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

再来看看六边形架构

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

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

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

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

时间: 2024-11-04 14:03:37

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

透过现象看本质——回头再看Nginx(进程模型、异步非阻塞、源码目录结构)

透过现象看本质--回头再看Nginx Nginx的进程模型 ? 使用过nginx的朋友都知道nginx的性能很高,而其原因可能少有人知.首先,nginx的架构就奠定了其高性能的基础.那么就先来看看nginx的基础架构吧,如下图所示:(不能完全理清楚所有内容也没关系,因为本小节讲述的主要内容是Nginx的进程模型) ? 本小节先来说说Nginx基础架构中的进程模型: ? 所谓进程模型,即Nginx响应请求或服务时程序运行(机器执行指令集)的方式,一般在nginx服务启动后,在Unix系统中会以da

回头再看C语言-iOS之而今迈步从头越(一)

关于目前比较流行的编程语言的一个情况来看,到2014年8月之前,大体上的结果是: *数据来自网络 名列三甲的分别是:C,Java,Objective-C,从这个表里面可以看出,C语言在编程界还是被普遍的认为非常重要的,并且作为很多大学计算机系的必修基础科目之一,可见C语言还是非常有群众基础的. 话再说回到iOS开发上来,因为苹果系统基本都是使用Objective-C(后面简称为OC)来做第一语言来使用的,但在一些深处的机制(比如运行时runtime)以及图像处理以及通讯录访问方面,还是会经常使用

zoj 3634 Bounty hunter(dp,没完全想清楚,需要回头再看_20151027)

M - Bounty hunter Time Limit:5000MS     Memory Limit:65536KB     64bit IO Format:%lld & %llu Submit Status Description Bounty hunter is a hero who always moves along cities to earn money by his power. One day he decides to N cities one by one At the

再看“笕实智慧校园”——作品的复盘[1]

这几个月因为学业繁重,加上准备省机器人竞赛的原因,没能经常写博客. 在学军的这几个礼拜,觉得自己还是学到了不少的. 如今,再看当年的笕实智慧校园工程(http://www.cnblogs.com/pityhero233/p/7246862.html),只觉得多了不少可以改进的地方. 一个基于python和pcduino的智慧校园系统,本着开(zhuang)源(bi)的精神可以用来借鉴.233. 运行在pcduino上的,需要搭配一些元件. 现在,接触到了各种板子.除了pcduino和现在已经被满

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

1.了解前端,深入前端,架构前端,再看前端.大体系-知识-小细节 个人认为:前端发展最终的导向是前端工程化,智能化,模块化,组件化,层次化. 2.面试第一关:理论知识. 2-1.http标准 2-2.w3c标准 2-3.ECMAScript标准 3.框架和类库 4.编码开发 5.运行环境 6.自我修养. 6-1.前端开发思维.敏捷软件开发流程(如SCRUM)和项目管理知识(如考取PMP). 6-2.个人github和技术博客.建立开源项目等总结经验和反思感想. 6-3.研究学习Web相关最新知识

HTTP服务七层架构技术探讨

原文链接http://kb.cnblogs.com/page/158568/ 1. 为什么分层? 计算机领域的体系结构普遍采用了分层的方式. 从整体结构来看: 从最底层的硬件往高层依次有: 操作系统 -> 驱动程序 -> 运行库 -> 系统程序 -> 应用程序等等. 从网络分层模型OSI来讲,由上至下为: 应用层 -> 表示层 -> 会话层 -> 传输层 -> 网络层 -> 数据链路层 -> 物理层 当然实际应用的TCP/IP协议的分层就没OSI

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

本文源码:GitHub·点这里 || GitEE·点这里 一.MySQL逻辑架构 1.逻辑架构图 基于下面的逻辑架构图,可以大致熟悉MySQL各个架构组件之间的协同工作关系. 很经典的C/S架构风格,即客户端/服务端模式. 2.分层描述 客户端连接 通常会进行连接池管理,连接用户权限认证,安全管理等操作. 可以通过如下命令查看连接配置信息:SHOW VARIABLES LIKE '%connect%';可以看到最大连接和每个连接占用的内存等相关配置. 核心功能 第二层架构封装MySQL一系列核心

机房收费系统合作——再看数据库设计

机房合作我负责了最简单的D层,接口层,工厂层.反正D层是我来写,于是数据库索性也就顺便设计了.已经是第三次敲机房收费系统了,每次都是相隔半年左右吧.需求搞得透透的了,数据库也就好设计了.基本跟第二次没什么大的区别,就是把Student表和Card表分开了. 重构的时候,我的数据库几乎什么都用到了:事务,存储过程,触发器,视图,联合查询等等.所以,这次设计数据库还是SO Easy的..并且,为了让婵婵和牛迁迁师哥写的方便,我把组合查询都写成了存储过程!!!!费了一番功夫,但是D层简单了不少.还记得

业务层架构模式

一:业务层架构模式概述 在三层架构中,业务层负责所有业务相关的工作,包括根据输入数据或已有数据进行计算,对从表示层输入的数据进行验证,以及根据从表示层接收的命令来确定应该调用哪些数据访问逻辑.对于应用系统来说,业务层主要维护业务逻辑,是系统的核心部分.因此,在应用系统开发时,业务层的开发是最为关键的. 业务层的架构模式有多种,最著名的就是以下两种 : 事务脚本模型(面向过程的设计) 领域模型(面向对象的设计) 二:事务脚本模型 事务脚本(Transaction Script)架构模型是按照传统的