• 关于系统分层的自问自答


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

    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

  • 相关阅读:
    gitlab web端使用
    1、gitlab的理论知识
    git命令
    gitlab web客户端的使用
    jenkins
    jenkins pipeline
    nginx
    ELK(+Redis)-开源实时日志分析平台
    OpenStack构架知识梳理
    Linux 下的dd命令使用详解
  • 原文地址:https://www.cnblogs.com/cando/p/2314207.html
Copyright © 2020-2023  润新知