zoukankan      html  css  js  c++  java
  • 关于系统分层的自问自答

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

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

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

  • 相关阅读:
    使用reflux进行react组件之间的通信
    一步一步学习underscore的封装和扩展方式
    使用nodewebx进行前后端开发环境分离
    react项目组件化思考
    css模块化策略
    immutableJS一些API
    CSS布局基础之二认识Viewport
    CSS布局基础之一设备像素,设备独立像素,设备像素比,css像素之间的关系
    【云图】如何制作全国KTV查询系统?
    【高德地图API】从零开始学高德JS API(六)——坐标转换
  • 原文地址:https://www.cnblogs.com/cando/p/2314207.html
Copyright © 2011-2022 走看看