DDD及相关概念

 

  • 领域:指一个切实可行的运用范围,比如电商、订票管理、会议管理等于,实现有一样天地的效力,与该相应的商领域同样。譬如Contoso会议管理网于零星个点来阐述(1)系统概览:销售会座位、创建新议会【领域的活动是什么,核心内容】(2)非功能性需求:扩展性、灵活性【降低维护资产,延长生命周期】。
  • 有界上下文:引入本概念的目的是啊大型、复杂系统的解说提供相同种易管理之方式。在这种说方式下,一个重型系统由多个发界上下文构成,每个有界上下文所富含的凡一个自包容的圈子模型,且产生投机我的普适语言。可以拿有界上下文看做是一个有着鲜明一致性边界的自动化的生意组件。在一般状态下,一个有界上下文更别一个有界上下文进行通信的道是发送事件。
  • 内外文线路图:描述不同模型中的接触点,明确说明有需要进行翻译的通信链接,并注明任何共享模块或对象。用户以开展这些倒后得出的结果就是是同种“上下文线路图”。这种地图提供的凡一切系统的概览,帮忙人民掌握不同的有界上下文是何等相互交互的。
  • 失血模型:模型才包含数据的定义及getter/setter方法,业务逻辑和应用逻辑都停放服务层中。这种接近以java中让POJO,在.NET中让POCO。
  • 贫血型:贫血型中包含了一些作业逻辑,但勿带有依赖持久层的作业逻辑。这片乘让持久层的事务逻辑将会见放服务层中。可以看到,贫血型中之天地对象是休指让持久层的。
  • 充血模型:充血模型中包含了有的作业逻辑,席卷借助让持久层的事务逻辑。所以,使用充血模型的园地层是凭借让持久层,简单表示虽是
    UI层->服务层->领域层<->持久层
  • 胀血模型:胀血模型就是把和作业逻辑不想关的其它应用逻辑(如授权、事务等)都加大至世界模型中。我深感胀血模型反而是另外一种之失血模型,因为服务层消失了,领域层关系了服务层的行,到头来还是什么都没变。
  • 实体
  • 值对象
  • 聚合
  • 上下文
  • 函数式编程
  • 函数式编程三百般思想:

immutable data
不可变数据:像Clojure一样,默认上变量是不可变的,如果你若改变量,你得拿变量copy出去修改。这样一来,可以让您的顺序少那个多Bug。因为,程序中之状态不好维护,在出现的时刻再糟糕维护。(你得试想一下如果你的次序来只复杂的状态,当以后人家改变而代码的时,是杀轻出bug的,在竞相着如此的题材就再次多了)

first class
functions:这个技能可以被你的函数就如变量一样来利用。也就是说,你的函数可以像变量一样叫创造,修改,并当成变量一样传递,返回或是在函数中嵌套函数。这个微像Javascript的Prototype。

尾递归优化:我们理解递归的弊端,那就是是若递归很老的说话,stack受不了,并会见造成性大下滑。所以,我们用尾递归优化技术——每次递归时还见面引用stack,这样一来能够晋级性,当然,这亟需语言或编译器的支持。Python就非支持。

  • 函数式编程的技术:

map & reduce
:这个技术并非多说了,函数式编程最广泛的技能就是是针对性一个集聚做Map和Reduce操作。这比较打过程式的语言来说,在代码上万一又便于看。(传统过程式的语言需要动用for/while循环,然后以各种变量中把数量倒过来倒过去的)这个很像C++中之STL中的foreach,find_if,count_if之流的函数的玩法。
pipeline:这个技术的意思是,把函数实例成一个一个底action,然后,把一组action放到一个数组或是列表中,然后拿数据传被此action
list,数据就比如一个pipeline一样顺序地让逐一函数所操作,最终获得我们想只要之结果。
recursing 递归
:递归最深的利益虽简化代码,他可拿一个犬牙交错的题目因此很简短的代码描述下。注意:递归的精粹是讲述问题,而立即正是函数式编程的花。
currying:把一个函数的几近独参数分解成多个函数,
然后把函数多重合封装起来,每层函数都回到一个函数去接受下一个参数这样,可以简化函数的基本上个参数。在C++中,这个特别像STL中之bind_1st或是bind2nd。
higher order function
高阶函数:所谓高阶函数就是函数当参数,把传播的函数做一个封装,然后回来这个封装函数。现象上便是函数传进传出,就像面向对象对象满天飞一样。

  • Event Source: 事件源

根据事件起源解决方案的着力要素是:

(1)在aggregate实例的状态发生变化时,该实例将发起一个事件来圆描述是种状态变化。

(2)系统将这些有事变保存在一个事件库里面。

(3)aggregate可以通过重播过去的波流来重建自己之状态。[以针对网的不当进行剖析时,事件起源和波重播真是无价的。例如,我们得以率先以当地复制一个风波库,然后在该地重播事件流来对应用程序进行调节,并理解到底以生产系统里头有了什么事情。]

(4)其他aggregate和流程管理器(可能在不同之有界上下文里)可以订购这些事件。

  • CQRS: Command Query Responsibility Segregation
    命令查询职责分开模式
  • 自洽:自洽是操作的平等种特色,意味着该操作会用多次而无移结果。例如,“将变量x的价设置为10”就是一个自洽操作,而“在x的值上面加1”则非是自洽操作。在消息传递环境受到,如果同长长的信息可以传递多次假设未见面改结果,则该信息是自洽的。消息自洽的原故发生半点单:有或是信我的性质使然,也来或是系处理消息之不二法门而然。【来自:探索CQRS和波源.pdf
    第137页】