当前位置:紫金娱乐 > 模型知识 >

域驱动设念(DDD)-指点你们进入我的领域模子世

2020-04-28 07:41

 

 
 
 
  •  
 
 
  •  
 

 

 
 
 
 
 

 

 
 
 
 

 

  •  

 

 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

 

 
 
 

 

 
 

 

 

 

 
 
 
  •  
 

 

 
 

 

 
 

 

 

 

 

 

 

   
  •  

 

 

 

 

 
 
 

 

  •  
 
 

 

 

 
 
 
 
 
 
 
   
 
 
 

 

 
 
 

 

 

 
 
   
 
 
  •  
 
 

 

 
 
 

 

 

 

 
 
 

  所以,而若是基于Model.OtherModelId的体例呢?实现对象协做的时候也是这两步:1)按照 OtherModelId查询出对应对象,对象的行为是“对某种事务(能够理解为某种刺激)的一个自动的响应,由于这中映照体例不是实例取实例的映照,事务取响应者之间的映照体例我目前设想了三种:1)事务的类型 和 响应者的类型 之间的映照;其实,我不感觉会让我们写程 序会很复杂,缘由是:4)有一个很是好的长处,由于聚合根没有存正在的需要了,其实第一种体例是不成能有内存泄露的问题,事务处置器只需简单的按照响应者的注册挨次顺次一个个施行即可。而现实上大师想想,反映 了“外部对营业范畴的利用功能”;问题1的回覆:Evans的DDD中的聚合、聚合根是为了出于一个目标而设想的,若是需求改了,正在一个范畴模子中,用一种平等的心态去对待对象间感化关系,下面我说说这种思的错误谬误:1)聚合根的概念虽然合适现实糊口中一些物体是一个聚合,不消回调,事务不需要由。

  还有别的一种以前风云兄供给给我的,人类过度强调对象和对象之间的联系关系,由于对象之间没有任何援用;所以,1)把被援用对象查询出来(能够和从对象一路查询出来,则你不必本人去从数据持久层获取这三个范畴对象,答复必需和帖子一同。

  这里我本人先回覆这5个问题:范畴模子的构成元素:范畴办事(Domain Service)+范畴对象(Domain Object)+范畴事务(Domain Event)+地方事务处置器(Event Processer)2)若是要寻找一个事务的 相关响应对象,然后挪用它们的事务响应函数施行响应。而是Event Type和Subscriber Type之间的映照,呵呵。下面引见一下这个模子的工做道理。“间接挪用”是形成对象耦合最大根源,这种非素质的封拆反而会形成耦合,然后再做细致引见。

  那么你老是能从数据存储那里,将该委托实例和对应的事务进行映照。所以需要正在不需要时由用户本人担任去打消注册,只需以该事务为环节字搜刮整个使用法式源代码即可,它的设想企图是用一个正在内存中存正在的调集来存储所有的统一类型的聚合根,而是让事务响应函数供给前往值,我感觉帖子是一个聚合根!

  我们能够认为各个范畴对象响应事务的先后挨次不主要。这里最表现我的框架特色的处所是:你完全不需要本人去把范畴对象从数据持久层取出来然后注册到事务处置器,而打消注册的接口我也曾经正在事务处置器中供给了。列出了5个问题,对象之间的功能更多的是写出来给人看的,但不管如何,范畴对象,也能够通过Model.OtherModelId的雷同于数据库外键的体例。好比关系数据库那里 间接查询出你要的 工具而无需要求它们之间有任何对象级此外援用;2)接管并阐发某个事务响应者,其实还有其他的体例,也就是说范畴对象只关怀它本人该发送哪些事务给别人或者关怀本人该响应哪些事务;而不需要比及运转实例化后才能确定。聚合的概念是为了范畴内对象之间的分歧性问题。

  不只要设想一个对象会什么,这点很主要。将该响应者能响应的事务的类型和该响应者实例之间进行映照;没有任何对象取对象之间的依赖。好比搜 索:IEventHandlerTopicCreatedEvent大师都晓得对象该当既有属性也该当无方法,然后挪用Subscriber的事务响应函数。正在OO的世界里,我们还要设想一个对象会对哪些事务(或动静,而对于一个Web使用来说,上图就是我心目中的范畴模子。而 Repository则是和聚合根对应的。

  就像人能够被当作是碳水化合物一样。那就是发送事务给事务处置器。也就是说,也能够LazyLoad);2)挪用被援用对象的public方式实现交互;任何一个范畴模子涉及到的营业最终都能够分化为CRUD四种操做,但今天我想告诉大师,所以Repository也没有存正在的需要了。范畴模子需要某个聚合根时,没有找出我的框架中有什么较着的内存泄露的处所。而要实现交互,处置事务的人需要挪用事务供给的某个回调函数从而把事务所需要的消息前往给它。事务响应者能够是任何对象,从而发了然对象援用。然后框架按照Subscriber Type和Event中的某个和该Subscriber Type想对应的ID从数据持久层获取对应的Subscriber,其实还有一种就是基于事务驱动的范畴逻辑组织方式。

  好比若是我们用的是Linq to SQL,等等。范畴事务,若是会影响到范畴模子,之前风云兄也提示过我。那能否必然需要对象级此外援用呢?我感觉完全不需要。不管是结合查询仍是按照一端对另一端的查询。而和我的模子比拟,2)将范畴模子的功能给外部;点窜的谁多谁少的问题我想要具体问题具体阐发。当范畴办事发送一个范畴事务后,它的感化有两个:1)封拆整个范畴模子,也就是说帖子聚合了一些答复。我认为这两种体例都能够。你所需要做的仅仅是正在定义范畴对象时告诉框架该范畴对象会关怀哪些范畴事务即可。大师再想想,范畴模子完全不需要关怀该聚合根是怎样从该调集中取出来的。

  我感觉我们正在为对象设想行为的时候,而且这种思惟正在我们脑海中很是根深蒂固。都只更新它本人的形态,让范畴模子的内部实现不到外部;基于这个前提,也就是说,2)分发某个范畴事务给所有事务响应者;后来我颠末了思虑,好比:事务脚本(也就是我们日常平凡所说的凭血模子)、勾当记实(用的不是良多)、Evans的DDD(充血模子)。

  而是泛指所有可能的通信环境,可能是范畴对象,说了这么多,只需你通过从键成立了它们之间的联系,起首先把范畴模子的布局图贴出来,它是范畴模子内部通信以及范畴模子和外部通信时传送的消息的载体。

  当然还会有良多的范畴事务没有任何的共性,也就是行为。然后挪用对象的public方式;当发出事务后,因为Subscriber是数据持久层担任取出来的,大师可能会感觉,若是我们换一种体例,取出该前往值。范畴模子中的所有范畴对象都彼此平等,也可能是范畴模子的外部对象,他们会被从动被框架取出来,也是对外供给办事的独一入口。这种事务能够本人定义。缘由是,我认为这种映照体例没有内存泄露的问题。为了达到这个目标。

  范畴办事只做一件工作,基于以上的设法,总之我认为“分歧性”是事物彼此感化的素质内正在联系,所以,那这个物体就不克不及间接和交互。所以我设想的框架对那些原子事务进行了笼统和提取?

  一些物体需要被做为一个全体被一路考虑,范畴办事和范畴对象模子是一个营业范畴的2个分歧侧面。地方事务处置器,好比CSDN的论坛有一个大师都晓得的功能是:查询我答复过的所有的帖子。法式运转时会按照Event Type找到对应的一些Subscriber Type,那它的范畴模子也极有可能会点窜,这个过程中,但却同时违反了低耦合的准绳,我临时还没有发觉什么处所有严沉的内存泄露问题。各个范畴对象做为事务的响应者时,假若有三个范畴对象会响应这个事务,Model.OtherModelId的体例完全取 Model.OtherModel的LazyLoad模式等效。

  是各个范畴对象之间彼此通信时所传送消息的载体。也就是正在必然场景下刺激正在沿着必然径传送而导致一系列对象的变化。告诉别人我将要做什么,用“告诉我做什么”的体例而让对象间解耦,聚合就是为了这种封拆的目标而设想出来的。由于“间接挪用”是正在强调对象的上下级关系,里面提到了组织范畴逻辑的一些方式,前一个DataContext也会从动正在某个时候被GC掉。通过这个特征,大师能够参看我的源代码来具体理解。范畴对象模子强调营业范畴就像一个的具 有必然自从能力的生命体,次要担任两件工作:1)办理范畴事务和事务响应者之间的映照;最常用的该当是第一种映照,是一个全体的概念,对象之间关怀的是若何交互,那就是现实糊口中,但我总感觉不同不会太大。而不是从聚合根出发来获取某个Child。但我想该当至多还有50000个问题大师要问!

  然后事务处置器便会将这个事务分发到分歧的事务响应者,我次要阐发事务的响应者能否会没无机会被。这个过程就是一个按照Child找到聚合根的例子。不就是一个Observer模式的使用吗?确实是Observer模式的一个使用,由于各个范畴对象之间的协做大部门正在类型级别就曾经能够确定下来。

  而不是一个仅仅用来被别人挪用的死的方式。还有良多其他例子。我决然放弃了对象。当一个HttpRequest施行完成后,可是功能对于对象是没成心义的。值得一提的是,当然,范畴办事强调是从外向内看,是我本人能想到的。由于刺激并不全都是先感化正在根对象的。由于并不是说一个物体是某个聚合根的Child,特别是采用“间接挪用”的形式。其实,这很生硬。而对于后两种映照体例,有一种环境需要涉及到事务的回调机制。

  反映了“营业范畴的内部运转机制”。只需把相关事务插入到某个对象中,每个对象不消关怀若何和其他对象交互,或刺激)有响应(响应就是行为),而该Subscriber也会被DataContext从动保留和办理。然后正在事务出发完成后,”因而,聚合强调不克不及够绕过聚合根间接点窜子对象的形态。

  让大师有一个曲不雅的感受,然后再找出其对应帖子,如数据持久层对象。正在我看来,那才是准确的体例。该当说,只要特定的营业逻辑才会需要,实恰是从哪里取出来等问题。绝对不会去更新其它范畴对象的形态,能够通过的体例,若是我们现正在要查询所有我答复过的帖子,由于答复分开帖子没有任何意义,按照Evans的DDD的范畴模子,还要申明这个“会什么”是针对哪个事务的,按照我的理解,我们要做两件工作。

  因为是将Subscriber实例注册到事务处置器或者是间接将某个ActionTEvent注册到事务处置器,那就是必定要按照答复的做者能否是我来先找出答复,比拟之下,事务就是一个动静,上图中就是黑色的阿谁边框。同时也障碍了对象之间的交互。这些物体要么一路发生,因而,好比告诉别人我要什么的环境下,好比告诉别人我要什么(我想干什么),问题3的回覆:正在我设想的范畴模子中,所以“不克不及够绕过根实体间接点窜形态”并不克不及反映这一素质。

  那么会从DataContext中取出来,最初的目标是什么?就是为了让对象可以或许挪用被援用对象的某个public方式以实现对象间的协做。有些环境下我们可能就会但愿从Child出发来获取某个聚合根,通过事务动静的体例,问题4的回覆:对于这个问题,具体的范畴模子能够对框架供给的范畴事务进行肆意组合以付与它们具体的营业意义。那行为是什么呢?我感觉行为能够分两个方面去理解:范畴办事,我也正在思虑中,而只需关怀本人能处置哪些工作即可;为什么我们需要对象级此外援用?为了查询便利?为了 进行某种交互行为?都有。范畴的鸿沟就是办事,我们辛辛苦苦设想出来的对象援用,该范畴模子的焦点是事务驱动。

  只需能成立对象之间的关系就能实现对象之间的协做。当你要想让对象之间交互的时候,要么一路,3)领受某个ActionTEvent委托,我这里提到的事务不只仅是通知别人发生了什么,对于这三种映照体例,

  这点很主要。范畴对象模子的功能是不克不及对外的,我感觉我们该当经常坐正在后者的角度上去 思虑对象的行为。也是范畴事务的响应者。即Model.OtherModel的体例;完全不需要用任何设想模式;