• 最精简领域驱动设计开发模版(针对WPF)


    一:领域驱动中的分层

    领域驱动设计将软件系统分为四层:基础结构层、领域层、应用层和表现层。

    clip_image001

    · 基础结构层:该层专为其它各层提供技术框架支持。注意,这部分内容不会涉及任何业务知识。众所周知的数据访问的内容,也被放在了该层当中,因为数据的读写是业务无关的。

    · 领域层:包含了业务所涉及的领域对象(实体、值对象)、领域服务以及它们之间的关系。这部分内容的具体表现形式就是领域模型(Domain Model)。领域驱动设计提倡富领域模型,即尽量将业务逻辑归属到领域对象上,实在无法归属的部分则以领域服务的形式进行定义。

    · 应用层:该层不包含任何领域逻辑,但它会对任务进行协调,并可以维护应用程序的状态,因此,它更注重流程性的东西。

    · 表现层:这个好理解,跟三层里的表现层意思差不多,但请注意,“Web服务”虽然是服务,但它是表现层的东西

    从上图还可以看到,表现层与应用层之间是通过数据传输对象(DTO)进行交互的,数据传输对象是没有行为的POCO对象,它的目的只是为了对领域对象进行数据封装,实现层与层之间的数据传递。为何不能直接将领域对象用于数据传递?因为领域对象更注重领域,而DTO更注重数据。不仅如此,由于“富领域模型”的特点,这样做会直接将领域对象的行为暴露给表现层。

    (在本例中,为了简便期间,用了领域模型,而不是DTO,DTO可以放在基础结构层)

    二:实例分层

    image

    可以看到:

    基础结构层:SmartCA.Infrastructure,包括了一些最简单的声明和实现,如实体对象工厂接口、数据接口、工作单元接口及实现、数据对象的基类;SmartCA.Infrastructure.Repositories,数据访问及实体对象工厂,如果我们换一个数据库,则可以增加第二个Repositories项目;

    领域层:领域模型和领域服务在这里;

    应用层:在本例子中,应用层只用来存储应用程序的某些状态,不涉及到任何领域领域逻辑;

    表现层:无任何特殊;

    三:核心类图

    image

    该图定义了本实例中的主要类的关系。

    需要注意的是,参考资料中是作者实现了一个注入模块的编写,本实例重写了本部分,使用了UNITY来实现注入。

    代码下载:SmartCA.rar

    参考资料:《领域驱动设计C# 2008实现》

  • 相关阅读:
    links[v1]
    WebSocket handshake: Unexpected response code: 404
    Spring mvc 启动 和 请求分发
    匹配括号
    js parseFloat 精度问题
    遍历查找跳格子逻辑
    Generic type test java
    java高效判断素数
    从数组中取3个数全排列
    vue-cli
  • 原文地址:https://www.cnblogs.com/luminji/p/2290313.html
Copyright © 2020-2023  润新知