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

  • 相关阅读:
    sqlhelper使用指南
    大三学长带我学习JAVA。作业1. 第1讲.Java.SE入门、JDK的下载与安装、第一个Java程序、Java程序的编译与执行 大三学长带我学习JAVA。作业1.
    pku1201 Intervals
    hdu 1364 king
    pku 3268 Silver Cow Party
    pku 3169 Layout
    hdu 2680 Choose the best route
    hdu 2983
    pku 1716 Integer Intervals
    pku 2387 Til the Cows Come Home
  • 原文地址:https://www.cnblogs.com/cando/p/2314207.html
Copyright © 2011-2022 走看看