博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
关于系统分层的自问自答
阅读量:6701 次
发布时间:2019-06-25

本文共 1284 字,大约阅读时间需要 4 分钟。

这是我对系统架构中分层的自问自答,也是我对系统分层的理解。

Q. 为什么要系统分层(Why layered system architecture)

A. 系统分层不是软件系统才有,比如计算机网络中就由OSI 7层网络模型。 在所有的系统组件中,每个组件的关注点是不一样,相互的依赖程度不一样,变化的频率也是不一样的。比如,有些组件关注通讯、事务、安全(当然这些都被做成中间件产品了,比如WebShpere,WebLogic),而这些基础的东西当然应该放到基础服务层(Infrastructure Layer);从依赖程度上说,依赖紧密的可以放到同一层;从事物变化频率上来看,UI变化时最快的,然后是流程和业务逻辑,再是数据,然后才是基础服务。如果我们不加区分地把代码写到一起会导致系统变成A big ball of mud 。 

 

Q. 为什么要独立出领域层(Why isolating domain layer)

A. 那么如何分层呢?从DDD(Domain Driven Design)观点来看。一个系统复杂有很多原因,比如硬件(分布式部署),软件(API,维护,配置复杂)等等。同时如果问题领域复杂,我们构建的软件系统就复杂,这就是DDD中说得根本性复杂(essential complexity)。 请看《A big ball of mud》这篇论文中的描述

Complexity: One reason for a muddled architecture is that software often reflects the inherent complexity of the application domain. This is what Brooks called "essential complexity" [Brooks

1995]. In other words, the software is ugly because the problem is ugly, or at least not well understood .

为了隔离这种根本性的复杂度,我们需要在我们的系统架构中区分领域层,使得我们让我们更关注问题本身

 

Q. 除了领域层还有什么需要提及的

A. OOA/D/P 让我们很容易抽象现实世界(比如问题领域)。但是OO不是对现实世界的完全映射,比如MQ。 我们在描述问题领域的时候,我们通常会说下一个订单,但是下订单是通过什么技术手段是没有提及的。在异步系统中,我们往往采用MQ作为一个手段。我们无法在领域模型中描述MQ这样的东西。这种情况下,MQ,Buffer,Cache等等往往以Service形式存在于我们的系统架构和设计中的。

 

Q. DDD中系统分层是怎样的呢

A. 由上到下分为 User Interface、Application、Domain、Infrastructure

转载于:https://www.cnblogs.com/cando/archive/2012/01/06/2314207.html

你可能感兴趣的文章
Android中SimpleAdapter的使用—自定义列表
查看>>
Java常见Jar包的用途
查看>>
P1616 疯狂的采药(洛谷,动态规划递推,完全背包)
查看>>
DAL调用SP时出现的异常处理
查看>>
javascript学习(11)——[设计模式]工厂模式
查看>>
【转】Linux 下修改Tomcat使用的JVM内存大小
查看>>
xcode 开发ios兼容性问题的上下黑边 和 coco2d-x 游戏分辨率适配 ResolutionPolicy::FIXED_WIDTH 都会引起上下黑边问题!!!...
查看>>
编程之美-第3章 结构之法
查看>>
makefile——小试牛刀
查看>>
bzoj 1084 DP
查看>>
wordpress教程:默认http头信息X-Pingback的隐藏与修改
查看>>
排序_3
查看>>
Python中的join()函数的用法
查看>>
2、Sprite,SpriteBatch,Texture,TextureRegion的初步认识
查看>>
LeetCode 7. Reverse Integer
查看>>
STM32Flash读写
查看>>
POJ——字符串插入
查看>>
git 常用命令笔记
查看>>
CodeVS 1044 拦截导弹(DP)
查看>>
WebSSH2安装过程可实现WEB可视化管理SSH工具
查看>>