我正在模拟一个档案,它是视频点播系统的一部分。想象一下像windows资源管理器这样的存档,多个用户可以在其中创建文件夹、上载视频、重组文件夹等。有一些业务规则(权限)决定是否允许用户执行此任务(即重命名文件夹、移动文件夹、查看文件夹等)
我将每个文件夹建模为聚合根,将一个文件夹移动到另一个文件夹似乎会影响两个聚合根
据我所知,我应该发送一个事件来修改其他聚合。然而,让我担心的是,如果第二个文件夹也被修改(比如从系统中删除或移除),那么我需要发送一个补偿命令来撤消第一个聚合更改
我更喜欢同时处理
我想知道发布事件是否比从聚合中抛出异常更可取。比如说,我有一个领域要求只有某个年级的学生才能报名参加体育活动。如果我对不符合条件的学生调用EnrollForSports,聚合是否应该抛出异常或发布事件,特别是如果其他聚合或流程经理对流程结果感兴趣
如果发布了一个事件,这是否意味着在我们重播时需要一个相应的内部事件处理程序来处理该事件,即使该事件不会改变聚合的状态
如果抛出异常,如何通知其他方?命令处理程序能否捕获异常,然后引发事件?可以从命令处理程序引发事件吗?主要来说,命令应该是有效且已执行的
首先,感谢您在这个问题上的意见。我在领域驱动设计方面是一个新手,我一直在绞尽脑汁寻找一些问题的解决方案(我认为它们非常基本,我肯定错过了一些东西)
让我先描述一下我的领域。我试图模拟一个典型的学校,它可以有教室,每个教室可以有多个部分/组,每个教室组中的学生。
用户主要是学校管理员和教师。学校管理员可以创建教室、教师和学生,而教师只能创建组并将学生分配到组。
学校有全球身份,但教室没有。当教室是学校实体的一部分时,它具有本地身份。教室组仅在教室内是唯一的
学校绝对是一个聚合根,其中包含教室聚合,
在一个演示项目中,作为概念验证,我发现自己有很多重复的DTO和字段。例如,考虑到1个表示项目或库存的根对象,我将拥有以下类和属性
CreateItem[代码、说明、重量]
聚合根上的实体[代码、说明、权重]
ItemCreated事件[代码、说明、重量]
项目读取模型[代码、说明、重量]
查询请求对象[代码、说明、重量、页面、页面大小]
响应DTO[代码、说明、重量]
等等
所有这些对象都是将我的应用程序分为传统域、应用程序和表示层的结果
您如何管理所有这些复制?像AutoMapper这样的
我最近决定学习领域驱动设计。我提出了一个假设的应用程序,并尝试为其设计架构。它是一个简单的销售点应用程序,具有有限的销售和库存上下文。在为这些有界上下文实现代码时,我有两个相互冲突的设计
设计#1:
与库存有关的任何事情都属于库存受限的上下文
如果收到销售订单,请求首先进入sales bounded上下文,然后在进行销售的步骤之一,您必须检查库存以查看该项目是否可用。在这种情况下,您请求清单上下文(但是这是在系统中完成的)。库存上下文将检查数据库并以可用性确认进行响应。这样,任何其他需要任何涉
短版:
对于需要访问数据库中货币转换率的值对象,您认为什么是最佳选择?
例:
Invoice.Amount=Invoice.Amount.toCurrency('CAD')
长版本:
我有一个名为InvoiceAmount的值对象,它有一个方法,toCurrency,将发票金额转换为指定的货币。我希望重用此货币转换逻辑,因为我知道在其他有界上下文(例如,saleorderamount,FreightCost等)中需要它。我的第一个想法是在SharedKernel中创建一个Money对象,然后让S
我们这里有一个相当大的应用程序,我正在考虑对它进行一些重构,以遵循DDD的指导
目前,它的首要问题是有界上下文和上下文映射。也许我只是不喜欢,但在我看来,除法是不可能的。例如,我们到处都有用户对象,它是完全相同的用户对象:显示名称、id和角色。还有一个例子:我们有CatalogItem对象来帮助我们对各地的其他实体进行分类。我们必须引入有界上下文依赖吗?除了那个烦人的电子商务示例之外,还有什么关于这个问题的指导吗?我发现,起初,有界上下文和聚合根似乎是DDD中最简单的概念。直到您真正实现了一个有
我刚接触领域模型,所以请原谅我问了一个基本问题
如果一个域对象与另一个域对象具有1-many关系,但使用第一个对象的逻辑仅与该对象相关对象的子集一起工作,那么公开该子集的最佳方式是什么
例如,假设一个人与许多订单相关,但某些外部逻辑只需要检查与此人相关的“已发送”订单。此人是否应该拥有DispatchedOrders属性,以及其他子集的其他属性(如CompletedOrders等),或者这是一个糟糕的设计?假设出于性能原因,我无法过滤内存中的对象,必须使用SQL只提取我感兴趣的子集
谢谢如果您正
如有必要,工厂可以访问基础设施的元素来构建对象?。在特定情况下,我有一个对象需要添加电子邮件签名,该签名作为参数存储在应用程序的配置层中。这个问题没有一个正确的答案。如果工厂本身是应用程序层的一部分,那么这应该没问题。您还可以添加一个应用程序服务,在需要时将电子邮件签名传递到您的域中。在DDD中,工厂与存储库处于相同的体系结构级别,但用于创建新对象而不是加载现有对象。因此,它可以像调用存储库一样调用基础设施服务。在DDD定义中,存储库和工厂是域层的一部分,而不是应用层。见例。
我试图了解CQR的读取端如何与我们正在编写的大型文档管理应用程序(视频/pdf文件/等)一起工作
我们希望显示用户具有编辑权限的所有文档的列表(即显示用户可以编辑的所有文档)。特定用户可以编辑的文档可能有100000个
总的来说,我已经了解到,一个单一的“表”(平面结构)应该足以满足大多数屏幕的需要,并且有了权限,每个角色都可以有一个表
我将如何设计我的阅读模型,以允许我快速获取可以为特定用户编辑的文档
目前,我可以看到一个表包含我的文档,另一个表包含用户,另一个表链接用户和文档之间的“编辑”角
我用NServiceBus创建了一个传奇,它请求外部服务获取客户信息并超时。超时后,saga将检查外部服务是否有响应。作为回应,我有相应客户的数据,现在我必须检查我们的系统中是否存在相应客户(如果他不存在-我必须创建他),然后我必须创建引用该客户的其他审计实体(如果我有创建他们所需的所有信息)
我想知道我应该如何检查一个特定的客户是否存在,何时不应该如何创建他
到目前为止,我有一些想法:
从消息处理程序内部调用WCF服务(检查、创建)
通过NSB将消息发送到客户范围内的上下文,并等待ID为的响
我想知道如何正确地建模我的聚合。域是accounting,我有三个实体:Account、AccountingEntry(这应该是一个值对象吗?)和AccountingTransaction。账户可以是客户的银行账户。AccountingEntry是账户中的一个分录,AccountingTransaction将构成单个交易的多个分录联系起来(例如,从账户a转账到账户B)。一起
我的想法是将Account和AccountingTransaction建模为聚合,AccountingEntry建模为Ac
问题:
两名员工(A&B)在编辑customer#123(比如版本#20)时同时下线,而在下线时继续进行更改
场景:
1-两名员工编辑customer#123并更改一个或多个相同的属性
2-两名员工编辑customer#123,但不进行相同的更改(他们相互交叉而不接触)
。。。然后他们都在线返回,首先是员工A追加,从而将客户更改为版本21,然后是员工B,仍然是版本20
问题:
在场景1中,我们要保留哪些更改
我们可以在场景2中进行合并吗
上下文:
1-CQRS+事件来源风格系统
2-将事件源数据
我正在尝试使用DDD为一个简单的应用程序建模
考虑以下简化代码,其中的想法是在父帖子被隐藏时隐藏注释:
class Post {
private $hidden;
public function isHidden() {
return $this->hidden;
}
}
class Comment {
private $post;
private $hidden;
public __construct(Post
人们常说DDD(领域驱动设计)更适合于复杂领域,而不是简单领域
复杂领域的特征是什么?(请比“it有复杂的业务规则”更具体)
哪些是复杂领域的例子
我如何将一个域划分为复杂域(即适用于DDD)或不复杂域?根据我的经验,使您的域复杂化的三个最重要的因素是:
大小
大型域往往会增加复杂性。处理和协调很多事情总是很困难的
规则和不变量
域(甚至只有几个有界上下文的域)在其用例和过程中可能有许多域规则和不变量和/或许多细微差别。这增加了复杂性。对实体或域间事件中的大量更改进行垃圾邮件处理的规则通常是复杂
在我的项目中,有一个概念是用户a向用户B发送一个FriendRequest。在简化版本中,请求如下所示:
class FriendRequest
{
long Id;
int UserId;
int OtherUserId;
string Message;
}
在Accept方法中,我需要检查当前经过身份验证的用户是否等于FriendRequest中的OtherUserId。currentAuthenticatedUserId从控制器向下传递到应用程序
背景:一家采用联合模式的国际公司由于慢性疼痛正在向微服务转型。具有快速部署能力的自治团队是非常理想的。尽管从理论上讲,服务确实相互依赖以获得更高的功能,但它们是自主的(独立开发和部署)。由于这是一种联邦模式和分散控制,我们不能像联合国那样强加严格的规则。由于不同国家的生产中存在多个版本,如果没有一个管理依赖关系的治理平台,我们预计会出现无法控制的混乱
让我们将需要协作的微服务集称为“兼容性集”。可以部署服务,但可能不满足其兼容性集中的更高功能。例如,MicroService A-4.3是完全自主
我想知道使用其他读取模型来更新我的particurlar读取模型是否被认为是良好的实践。例如,有两个agreegate根:User和Report。要构建报表查询,我需要用户的当前状态,并且我已经阅读了提供该信息的模型。我可以使用它吗?还是应该仅根据事件(来自不同的AGREGGATE)重建查询
我在这种方法中看到的一个问题是,我可能希望在这些报告中让用户在过去的特定日期处于状态。当然,我忽略了保持阅读最新的问题
也许我可以为报表查询建立支持用户表?答案取决于您希望太多阅读模型的解耦程度
如果您想要
我试图应用一些DDD概念,我只是想知道什么更有意义:实体调用自己的方法,还是用户(参与者)调用自己的方法
例如,假设我们有一个约会实体。
只有当用户是该约会的所有者时,才能取消该约会(因此我们需要检查用户是否具有适当的权限,然后才能允许该操作)。我们可以采用以下两种方法之一:
pseudocode
// method #1
User.Cancel(a *Appointment) result
// method #2
Appointment.Cancel(u *User) result
有
假设我有一些品牌s,每个品牌都有一些产品s。当定义实体遵循CQRS模式时,将列表作为品牌的一个字段是否是一种良好的做法?或者一个实体不应该持有另一个实体,我需要定义另一个实体BrandProductRelationship
public class Brand {
private String id;
private String name;
private List<Product> products;
}
public class Product {
我正试图根据定价计划规范强制执行web API中的限制
例如:
用户订阅三个计划之一。每个计划都允许为单个用户连接多个社交媒体配置文件。当前,当用户请求连接新配置文件时,在web api处理程序中强制执行限制
随着需要满足更多的规范,它增加了api处理程序的复杂性,并要求进行抽象。我在读一本关于领域驱动设计的书,偶然发现了规范模式
问题是应该在哪里应用规范模式。在应用层(api处理程序所在的位置)还是在域层
若它属于域层,我应该在添加新概要文件时在存储库中强制执行规范吗
socialMe
这是我试图解决的问题。我有个客户。该客户端需要软件来管理事件
客户端有多个设施。每个设施包含多个位置
当他们记录一个事件时,他们需要记录的最低信息是事件发生的地点,以及事件发生地点和发生情况的设施
所以我有一些问题是在模拟这个问题。这就是我所拥有的
我的问题是:
我认为这是一个很好的设计。设施根目录在我看来是有意义的,因为位置不能独立存在。但事件现在软引用了设施和位置
我考虑将位置作为一个值对象,而不是实体。I此案例事件将有其自己的位置副本。但如果位置发生变异,这将成为一个问题
有什么想法吗?
最近我一直在尝试让我的web应用程序使用分离的层
如果我正确理解了该概念,我已设法提取:
域层
这就是我的核心域实体、聚合根、值对象所在的位置。我强迫自己使用纯域模型,这意味着这里没有任何服务定义。我在这里定义的唯一东西是存储库,它实际上是隐藏的,因为axon框架会自动为我实现它
基础结构层
这就是axon在域层中为我的聚合实现存储库定义的地方
投影层
这就是实现事件处理程序的地方,使用MongoDB为读取模型投影数据以持久化数据。它只知道事件模型(kotlin中的普通数据类)
应用层
这就是混
假设您有一个应用程序,您可以在该应用程序中创建投币赌注。您的帐户有一笔用信用卡支付的余额
事件顺序如下:
邮政/投币投注{金额:5美元}
在Bet子域用例中启动事务/获取锁
用户是否有足够的余额?(检查用户存款的会计合计余额预测)
从用户帐户中借记5美元的金额
创建下注/抛硬币以获得结果
如果用户在正确的方向下注,则向其付款
提交事务
UI层被赋予下注并显示动画
我的问题是如何用两个独立的BoundedContext(博彩/会计)对此进行建模。它说,数据库事务不应该跨越边界上下文
你好,我有两个实体,它们共享一些共同的属性,学习和教师,然后我考虑做一个推广
但我对如何在我的领域中表达这一点表示怀疑。
我应该将person表作为普通实体吗?还是作为根聚集物?
或者,您不需要将该个人实体和两个学生或教师实体表示为aggregate根吗
我怀疑如何在泛化的情况下对我的领域建模。
但具体地说,我怀疑我是否应该将我的person类作为aggregate根,实体之间的所有共同点都在person类中,这里有一些关于DDD的误解。聚合根不应直接引用其他聚合根。聚合根引用另一个根的唯一方
我是DDD+TDD领域的新手。但我从事编程工作已经将近9年了
有人能给我解释一下坚持的好处吗?典型的nHibernate应用程序只是将类和数据库之间的依赖关系推送到映射文件
如果更改类文件或数据库,则必须更改映射文件。那么,它不只是通过增加一个抽象层来推动依赖性吗?在我看来,到目前为止,我不认为这是什么革命性的。但我不确定我是否遗漏了什么
最后,如何测试映射文件?映射文件中可能会出现bug,如何测试它们?PI不是关于使用NHibernate的。PI代表忽略在开发领域模型时如何存储数据。是的,它通
在我第一次尝试系统集成时,我确定了以下有界上下文:
发票
订阅
收藏
特别是对于集合绑定上下文“暂停过期帐户”功能,我们将:
从发票中获取过期发票的列表
向用户发送暂停通知(内部电子邮件服务)
将请求的挂起发送到上下文
我理解如何使用阻塞web服务来集成有界上下文,但我可以看到,如果远程服务关闭,这将带来问题
我知道消息总线,但不确定我们将如何与消息策略集成:
每个上下文是否都包含外部有界上下文的本地读取模型(当外部有界上下文添加/删除实体并通过唯一ID关联时,侦听外部有界上下文中的事件)
如果
我的应用程序被分解成几个程序集
Core程序集包含所有域对象,如Person和Sale,以及接口存储库,如IPersonRepository和IsalRepository
MyProject.Data本应处理持久性,但我对它的工作原理有点困惑。我是否应该使用实体框架将表映射到域模型?我应该用Fluent API来实现这一点吗?或者我应该实例化模型类并手动填充它们吗?在我看来,您不应该尝试将域模型对象用作实体框架实体。您将无法制作由原子方法组成的正确封装的域对象。相反,它们需要具有EF所需的具有g
我有一个关于聚合设计的问题,正如Vernon在DDD社区中的文章以及他的《实现域驱动设计》一书中提出的那样
在这篇文章中,他探讨了在设计BacklogItem和Task时两种可能的方法。在其中一种情况下,任务不是它自己的聚合根,因为它有可能使真正的不变量不受保护,而聚合根就是BacklogItem
但是,设计聚合根的另一个准则是,对实体的访问只能通过根本身完成。这意味着,为了在这种方法中获得对任务的访问权,必须现在访问它所属的BacklogItem并请求backlog项。通常情况下,人们只希望看
我正在使用领域驱动设计实现一个社交网络。
我已经设计了配置文件上下文,其中包含用户ID,用户名,配置文件图片等。。。在这种情况下,用户可以更改其用户名
我还有一个消息上下文,用于在用户之间发送消息,在这个上下文中,我有一个包含userID和userName的User类,注意User在聚合中。
问题是用户名可以在概要文件上下文中随时更改,这就是为什么我选择不将message类与user类绑定,否则我将使用olds用户名获取旧消息。
是否有一个方法可以让我每次都通过询问配置文件上下文来惰性地获取消息
我有一个关于microservice/CQRS体系结构中使用的集成事件的问题
事件的有效负载只能引用聚合,或者可以包含更多信息
如果只能发送引用ID,唯一可行的解决方案是通过某种类型的调用带来其余的信息,但是源站必须实现一个端点,服务最终将更加耦合
例如,创建用户并引发事件时
UserCreated {
userId
name
lastname
document
...
}
这是正确的吗
如果只能发送引用ID
为什么只允许这样做?我曾经使用过一个使用微服务的系统,
有人能告诉我一个在.NET平台上开发的“完整”DDD示例吗。我发现的大多数例子都感觉“不完整”
我很想看到DDD原则的实际应用。这些是ASP.NET MVC示例应用程序-
对我来说已经足够好了
在这里可以买到关于DDD的书-
(如果您不想注册,请使用www.bugmenot.com)
编辑
“ddd快…”还不够好。寻找“ddd解决软件核心的复杂性”。您可以尝试作为本书一部分构建的代码
该代码可以从Codeplex免费获得,也可以在该书的网站上获得,是一个功能相当完整的应用程序,用C#演示DD
上下文:代码的结构是WCF服务(服务器大小)与域模型对话,域模型与数据层对话。我需要在实体中某些值发生变化时创建工作分配(针对真实的人)
目前,我已经把这种逻辑放在了WCF服务中,但这让我觉得有点恶心。然后我继续将逻辑移到存储库中,但这也让我感到恶心。现在我没有地方放了
我没有的是一个域服务,它可以在WCF服务和域存储库之间进行中介!这是我应该创造的东西,并把这个逻辑放在那里吗?您还有其他想法吗?您的域模型应该理解,当这些属性值更改时,需要采取一些特殊的操作。动作的细节应该分离出来——可能使用W
您知道动态语言中的DDD工作吗
当偏离面向企业的解决方案时,DDD的实用资源往往会显著减少(谷歌搜索排除C#、.NET、ASP和Java的结果会减少10倍),但我实际上找不到一个动态语言中DDD实现的示例…不,我没有,但是原则是一样的,所以不应该有任何理由说明它不能很好地工作,特别是如果所讨论的动态语言具有良好的OO支持(例如Ruby)
也许更好,因为如果合适的话,您的域模型可以更容易地利用特性/混合以及来自的概念等。TYPO3协会不久前开始致力于开发PHP框架,重点是鼓励域驱动设计。该框架现在
当使用guid作为标识字段而不是自动递增整数时,实现域驱动设计是否更容易?使用guid,您不必跳转到数据库来获取实际值。我推荐使用guid,因为您不必对它是什么感到困惑。而且,我知道这经常被当作一个笑话来讨论,但是我不得不调试系统中发生的一个问题,在这个系统中,它在寻找uint而不是guid。这导致sharepoint中的模板被停用,我们无法重新激活它。花了2天时间才发现根本问题所在。因此,回顾一下使用Guid的情况。我看到Guid相对于递增整数的唯一优势是身份创建的分散性。也就是说,递增的整数
我不知道如何模拟这种关系
教室里有很多座位,每个学生都在教室里学习,教室里有一个最喜欢的座位
在我看来,我有两个聚合根:教室和学生,座位a是由教室聚合的实体
对于一个学生来说,要有一个fovorite座位,它必须有一个指向它的引用,而不是一个聚合根
有什么建议吗?
提前谢谢你,埃里克。嗯,这取决于。。。我可能会有像你这样的座位。学生可以是实体,但座位在我看来更像是价值对象。然而,所有这些都取决于您的上下文。我不确定什么对你来说是重要的,如果我的建议没有意义,请解释一下你的背景。一个可能的选择是每
我想先为我的英语不好道歉。我试图在我的项目中实现DDD,但我有一些问题,我将尝试描述。我正在开发一个聊天应用程序。前端非常简单,没有房间,只有一个窗口显示最后n条消息
第一个问题来了。我没有看到任何实体在这里聊天室将是好的,但我只有一个房间。对我来说,信息似乎是一种价值目标。所以我不知道如何保存聊天状态,我认为为值对象建立存储库是一种糟糕的做法。
这个聊天应该有一个特定的功能,它应该将相关的消息分组并存储在一起,创建类似ChatSegment的东西。这些段将被m个离题消息块划分。离题消息是指与当
我目前面临一个非常不寻常的设计问题,希望比我聪明的开发人员能够提供一些见解
背景
我被一家非营利性组织雇佣来帮助他们重新开发他们遗留下来的,但非常有价值的(社会价值方面的)软件。开发团队不同于我作为软件开发人员时遇到的任何团队,它由少数开发人员和更多的非编程领域专家组成。让这种安排与众不同的是,领域专家(让我们称他们为内容创建者)使用定制工具(其中一些工具基于prolog专家系统引擎)来开发基于web的软件组件/表单
问题
系统使用非常笨拙的回发模型在服务器端执行逻辑操作并返回新表单/结果。它速
我是DDD新手,需要明确一些概念,以便我可以将其应用到我的项目中
基本上,我有一个域对象“Customer”。CustomerRepository将通过引用DAL返回此域对象
问题是DAL无法提供“填充”客户域对象所需的所有信息。有关客户的一些信息将由其他外部资源获取,可能是其他存储库或外部web服务
也许我应该划分我的“客户”域对象。但如果我的业务逻辑不允许我这么做呢
另外,返回域对象是否只是存储库的责任?是的,它应该是存储库的责任
现在仓库很便宜。也许把数据翻一番可以解决你的问题?例如,如果
我一直在研究CQR,但我发现它在显示Web应用程序中的命令结果时存在局限性
在我看来,使用CQR时,必须刷新整个视图或其中的一部分以查看更改(使用第二个请求),因为原始命令请求将只存储将来要处理的事件
在Web应用程序中,命令请求是否可能将其创建的事件的结果带回浏览器?这个问题的标题的答案非常简单:无、无效或从WebBrowser/rest的角度来看200 OK,主体为空
应用于系统的命令(如果成功提交更改)不会产生结果。如果您希望将业务逻辑留在服务器端,那么确实需要通过执行另一个对服务器的请求
我看到这些类型的模型在网上有很多样本
public class User
{
public long Id { get; set; }
public string Name{ get; set; }
public virtual ICollection<Product> Products { get; set; }
}
公共类用户
{
公共长Id{get;set;}
公共字符串名称{get;set;}
公共虚拟ICollection产品{get;set;}
这可能看起来像是一个老生常谈的问题,但却找不到答案
我正在开发一个简单的订单处理应用程序。相当多的领域逻辑,所以我选择了领域模型模式。每个订单都有一个名为“普通”或“快速”的“订单类型”
我有一个Order实体,我公开了一个名为OrderTypeID的int属性,因为我认为可以将OrderType的Id存储在该int字段中。工作正常,但当我必须检索订单时,我可以填充回整数“order Type”Id,但我需要在屏幕上显示“OrderType-Express或普通”。所以,订单实体在进入持久化阶段
我有一个时间段(上午,下午,晚上等)的一些对象的参考需要。预定的会议,实际的会议
虽然时间段在数据库中具有ID,但它肯定不是实体,因为它不会更改,“AM”时间段在所有对象中都是相同的
我的困难在于知道如何从数据库中检索这个值对象。因为不同的对象可以引用它,所以它不应该是它们的任何存储库方法的一部分,但同时它不应该真正拥有自己的存储库,因为它不是根
那么,您建议如何从数据库中获取该文件
谢谢
更新
我赞同eulerfx的回答,因为他解释说句点仍然可以通过存储库从数据库返回,尽管我并不真正喜欢为多个
我们正在尝试在我当前的项目中使用DDD技术,并且已经开始经历领域建模的过程,并且在“如何”创建领域模型方面遇到了很多摩擦。我还没有找到很多关于这个话题的例子
我们已经开始尝试通过与业务用户交谈来定义无处不在的语言,并给出一个域实体及其属性的列表。这进展得很顺利,但我们遇到了一些问题,比如:
行为、行动
权限
业务逻辑(如果attributeA=true,则为foo-else-bar)
我对如何捕捉所有这些不同的东西(序列图、用例、流程图等)有很多想法,但如果有一个正式的流程或一些资源提供示例
在领域驱动设计中,我有以下情况
我有一个汽车模型。车辆可以是掀背车、轿车、卡车等类型
VehicleType存储在数据库查找表中
问题是:
如何对域进行建模
我是否按以下方式对其建模:
public class Vehicle
{
public int VehicleId{Get;Set;}
**public int VehicleTypeId { get; set; }**
public string MakeCode { get; set; }
public
考虑到域驱动的设计,基础设施或系统可以使用域的对象(值、实体等),还是应该应用依赖倒置,以便基础设施只依赖于自身定义的接口
存储库呢?它是否同样适用
它是否违反了基础架构、存储库或系统代码(取决于域)
(A) 基础结构依赖于域的示例代码:
namespace Infrastrcuture {
public class Sender {
public void Send (Domain.DataValue data) { ... }
}
}
namespace I
我正在构建一个由两个微服务组成的系统。他们将遵循CQR、ES和DDD协议。我想用阿帕奇·卡夫卡作为“真相之源”——正如杰伊·克雷普斯在Confluent和LinkedIn的工程博客上的许多材料中所说的那样
我的问题和主要问题是:
当Apache Kafka成为真相来源时,如何为新实体生成身份?
例如:
我有一个订单(在网上商店)。因为卡夫卡是我的真理之源,所以我想先将数据放入卡夫卡,然后使用卡夫卡的数据填充一些数据库,例如MySQL或Elastic Search。当用户下新订单时,我会在日志中添
实际上,我正在处理日期范围,每天在某个特定的时间,修改应该被锁定。因此,在这段时间之后,我应该不能为实际的一天添加任务,只为第二天添加任务。这个锁定时间应该存储在配置中,我应该能够在管理设置中更改它
将锁定时间注入任务调度器的正确方法是什么?我应该添加一个配置repo,还是应该通过调度程序的实例化来注入它?配置应该是域的一部分吗?锁定是业务规则的一部分。因此,它应该被视为域服务的一部分。此锁定服务是一个业务功能,给定一组值,它将确定是否允许添加或更新任务
我可能会这样做:
public clas
我很喜欢MongoDB,但我正在考虑使用postgres作为读取模型,并使用graphQL从中进行查询。我必须要写一个适配器才能做到这一点吗?如果是这样,我应该从哪里开始呢?一如既往,这取决于我认为适配器方法不适合关系数据库,因为需要ORM。人们通常希望在wolkenkit之外建模,并且只公开投影功能。如果人们想走这条路,我们是否可以提供文件夹结构server/projections,而不是server/readModel?这应该可以通过使用(无状态)流实现,因为读取模型基本上只是具有内置持久性
我有一个名为奖励的微服务。当客户在不同的微服务中进行某项活动时(花费了特定数量的钱),该服务会发布一个事件,比如说SpentRewardingMoney
在奖励服务中,我的聚合根是Customer
public class Customer: Entity, IAggregateRoot
{
// some properties
public List<CustomerReward> UserRewards { get; private set; } // reward
上一页 1 2 ...
27 28 29 30 31 32 33 ...
下一页 最后一页 共 42 页