• Domain Drivern Design = DDD (领域驱动设计)


    什么是领域驱动呢?
    这里Martin Folwer提出的三种模式:

    事务脚本 Transaction Script

    领域模型 Domain Model

    表模块 Table Module

    虽说马丁大叔有些言论值得商榷,但关于这三种模式的归纳我认为在近几年内还是非常到位的。关于这三种模型的详细内容,可以参考马丁大叔的那本《企业架构模式设计》。我只为了方便说明稍微带上一些。
    这三种模式的分类标准,应该是按照系统中业务逻辑的组织形式来划分的。

    简单地说,如果你把所有的业务逻辑归纳起来,成为一个个“函数”,应该很容易理解,就好象当初学习C语言的时候老是让我们写函数一样。把这些函数以存储过程或其他形式存放在数据库里,然后在程序中直接调用,这便是是“事务脚本”。注明的是,这和所谓的“三层架构”无关,就好象Petshop里那样虽然没有使用存储过程,但是把那些函数以一个个函数调用的形式写在了DAL中,仍然属于“事务脚本”,用一些人的话说叫“不OO”。
    “事务脚本”这种方式简单易懂,问题主要在于系统在变的庞大后对于一堆堆的函数的维护成了问题。于是便有了大名鼎鼎的“领域模型”。简单地说,领域模型希望完全脱离数据库的限制,让程序员进入一个彻底的面向对象的世界,以面向对象的方式,运用各种复杂的设计模式,获得一个复杂的面向对象的体系。我们用这种方法来描述业务逻辑。而这样设计的问题在于数据库大多不是面向对象的,因此我们需要通过某种方式保存(“行话”叫“持久化”)这个面向对象的体系中的数据(这里埋下伏笔,这个“保存数据”的内容就是和EDM大显身手地方)。
    而“表模块”显然“很net”。我认为这种模式大体上是一种领域模型的妥协,可能马丁大叔对这种模型的归纳也就来自ado.net中的的Dataset。“表模块”中程序员使用面向对象的方式来进行业务逻辑的设计的,但是在设计中,必须用到一种“表对象”(其实就是DataTable了),这实质上是数据库中数据表的映射,程序员只需要在表对象上进行数据的修改,然后通过一些方式这些数据就能自动的更新到数据库中去。也许是ado.net提供的强大功能将“表模块”支持的太完美了,以至于在.net平台下的开发很多人都不知不觉使用了“表模块”这种模型。
    而DDD,简单地说就是在领域模型中,先设计领域模型再有数据库,于是叫领域驱动,相反地,对于某些业务逻辑简单的系统,可以先有数据库再有领域逻辑,也就是数据驱动了。

  • 相关阅读:
    Android不规则瀑布流照片墙的实现+LruCache算法
    嵌入式OS入门笔记-以RTX为案例:六.RTX的任务调度
    Oracle backgroup processes
    Android中数据库的操作流程详解
    Dreamweaver PHP代码护眼配色方案
    Twitter 新一代流处理利器——Heron 论文笔记之Heron架构
    Docker简单介绍
    C#下使用GDAL
    Android:实现仿 美团/淘宝 多级分类菜单效果
    KVC在定义Model类中的妙用
  • 原文地址:https://www.cnblogs.com/p_db/p/2107976.html
Copyright © 2020-2023  润新知