Domain driven design 域驱动设计中跨有界上下文的实体

我试图理解实体如何在多个有界上下文中运行 给一个公司的雇员。在(例如)人力资源上下文中,此人有姓名、姓氏、地址、工资参考号和银行帐户。但在会计方面,所有相关的都是工资参考号和银行账户 在人力资源上下文中是否有员工实体,在会计上下文中是否有值类型(例如,受薪员工) class员工 { 公共银行帐户BankAcountDetails{get;set;} 公共字符串全名{get;set;} 公共广播地址{get;set;} 公共字符串SalaryRef{get;set;} } 受薪员工类别(??):

Domain driven design 在DDD中,每个存储库或有界上下文或事务的UoW?

在DDD中,聚合根目录可以有一个存储库。让我们取一个订单聚合,它是非持久对应的OrderRepository和持久对应的OrderUoW。我们还有ProductVariant聚合,它跟踪订单中产品的库存。它可以有一个ProductVarianeTposition和ProductVarianeToow 订单和ProductVariant的工作方式是,在持久化订单之前,检查库存。如果存在库存,则将通过调用OrderUoW.Commit()来持久化订单。是的,接下来将调用ProductVarianto

Domain driven design DDD:当工作单元不存在时,将存储库与文档数据库分离';不适用

我将Azure Cosmos DB的DocumentClient引入到DDD项目中,但我在将我的存储库与DocumentClient分离方面遇到了困难 目前,该项目使用实体框架,我在其中向存储库中注入了一个IUnitOfWork,存储库在完成更改时调用IUnitOfWork.Commit()。(我跳过了其他细节,但这是高级别概述。) 但是,将IUnitOfWork与DocumentClient一起使用是不对的,因为它只是执行对URI的HTTP请求以进行CRUD操作 我可以将IDocumentCl

Domain driven design 事件源系统中的预测

在事件源系统中,我有一个类型为Order的聚合根。让我们假设以下事件是 发生: OrderPlaced(orderId、placedAt、customerId、orderLines),其中OrderLine(lineId、productId、price) OrderAccepted(orderId) 假设我们需要两个不同的投影: 包含每个客户的所有已接受订单(按年份分组)总价的预测。大概是这样的: OrdersByCustomer(customerId,SummationOnAccepted

Domain driven design 价值与实体对象(领域驱动设计)

我刚开始读DDD。我无法完全理解实体与价值对象的概念。。有人能解释一下当一个值对象被设计成实体对象时,系统可能面临的问题(可维护性、性能等等)吗?这个例子很好…简化为本质区别,标识对实体很重要,但对值对象不重要。例如,某人的名字是一个值对象。客户实体可能由客户名称(值对象)、List OrderHistory(实体列表)和默认地址(通常是值对象)组成。客户实体将有一个ID,每个订单将有一个ID,但名称不应;通常,在对象模型中,地址的标识可能并不重要 值对象通常可以表示为不可变对象;更改值对象的一

Domain driven design 存储库模式:如何延迟加载?或者,我应该拆分这些合计吗?

我有一个域模型,它有一个编辑器和一个项目的概念 一个编辑器拥有多个项目,一个项目不仅有一个编辑器所有者,还有多个编辑器成员。因此,一个编辑器也有许多“连接”的项目 我采用DDD方法对此进行建模,并使用存储库模式进行持久化。然而,我还没有很好地研究这个模式,以确定我应该如何做到这一点 我的工作假设编辑器和项目可能在同一个聚合中,根是编辑器。因此,我可以获得一个编辑器,然后枚举它的项目,并从那里枚举项目的成员编辑器 但是,如果只允许我从存储库中检索编辑器,这是否意味着当我获得拥有它们的编辑器时,我必

Domain driven design DDD:所以,标签。实体还是值类型?

在域驱动设计的上下文中,StackOverflow标记(即)是值对象还是实体 编辑: 想象一下,你必须建立这样一个网站。你如何看待“TAG”?在Abter的回答上进行一点扩展。 标记是一种值类型 为什么? 因为拥有它是没有意义的 var tag1 = new Tag("DDD"); var tag2 = new Tag("DDD"); Assert.AreNotEqual(tag1, tag2); 显然,它们应该彼此相等,因为标签除了标签之外没有其他标识。另一方面,问题和答案肯定是实体只是一些

Domain driven design 在DDD中,是否允许实体的集合属性具有部分值?

在域驱动设计中,是否允许实体的集合属性具有部分值 例如,属性(如Customer.Orders、Post.Comments、Graph.Vertices)应始终包含所有订单、注释、顶点,还是允许包含今天的订单、最近的注释、孤立顶点 相应地,存储库是否应该提供如下方法 GetCustomerWithOrdersBySpecification GetPostWithCommentsBefore 等等?我不认为DDD告诉你做还是不做。这在很大程度上取决于您正在构建的系统和需要解决的具体问题 我甚至没

Domain driven design DDD如何获取值对象列表

我有一个域模型 Customer-聚合根目录-因为没有客户订单不可能存在 订单-实体 OrderStatus-值对象 在我的表格中,我需要所有订单状态的列表 我是否应该从存储库中获取一个空的客户实体(AR)以及一个包含所有订单状态列表的空订单实体?这很尴尬。好吧,这总是取决于你的问题领域,但由于缺乏进一步的信息,我认为你可能需要稍微打破你的建模 即使订单没有客户就不可能存在,它也不会是客户AR下的子实体。您需要引入有界上下文的概念 客户将是一个业务连续性的应收账款,而订单将是其自身业务连续性

Domain driven design 分布式领域驱动设计资源

我对开发DDD应用程序很有信心,但有一个领域继续给我带来问题,那就是当两个应用程序相互集成时。我正在努力寻找关于这个主题的有用的书籍或资源。诸如EAI模式之类的书籍深入讨论了消息传递模式和消息构造,但没有真正解释如何构建使用这些模式的系统 我到处搜索,我很确定没有示例应用程序演示如何集成两个系统。我理解异步消息传递的概念,但同样找不到如何应用它的好例子 SOA上的资源似乎一直在重复相同的概念,而没有演示如何实现它们,而且往往似乎更关心向我销售产品 以下是我竭力想回答的问题: 每个应用程序都应该有

Domain driven design 域驱动设计:禁止对其成员的聚合引用

遵循DDD规则,聚合不应允许外部对象持有对其成员的引用 如果聚合“发票”封装了发票及其详细信息。聚合发票应如何提供信息,以便我可以显示详细信息或生成报告?在DDD的上下文中,持有引用意味着某种数据库引用。这并不意味着从数据库加载聚合后,任何东西都无法获得对其任何成员的运行时引用。其思想是,与聚合成员的所有交互都要经过聚合,从而实现其作为一致性和完整性边界的作用。但是,出于显示和查询的目的,我更喜欢使用特定于查询的类来表示查询数据,并且与用于表示聚合的类不同。这使得聚合可以专注于其行为,而不必关心

Domain driven design 在DDD中执行实体删除

我正在学习DDD,有一个基本问题: 工厂、丰富的域模型、存储库(CRUD)的创建、读取和更新似乎都得到了处理,但是删除呢?删除实体可能有一些业务逻辑,您在哪里处理?RepositoryImpl(属于基础设施)层不应该麻烦自己检查这些不变量,它的工作是从底层数据存储中删除给定的实体。这似乎与工厂的意图截然相反,但DDD并没有类似于“杀死”工厂的删除功能 假设有一个订单实体用户可以删除,但只有在它处于“已完成”状态时才能删除,因此请求删除repo.delete(ent)的客户机应该会得到一个异常。类

Domain driven design 核心域能否跨越多个有界上下文?

(一) 埃文的书,第415页: 此外,领域模型的关键方面可能跨越多个领域 有界上下文,但根据定义,这些不同的模型不能 以显示他们的共同关注点 a) 我假设这句话暗示核心域CD可以跨越多个有界上下文BCs b) 我假设CD中的BCs应该只包含核心元素,而不包含通用元素?如果是这样的话,难道这不意味着我们应该始终在设计BCs(那些包含在CD中)时考虑核心域吗?换句话说,在我们开始设计BCs之前,我们应该对CD有一个大致的概念 (c) 。。。但根据定义,这些不同的模型不能被构造成 显示他们的共同焦点

Domain driven design 每个实体是否需要另一份回购协议?

例如,以订单实体为例。很明显,没有订单,订单行是不存在的。因此,我们必须借助OrderRepository抛出一个order实体来获取它们。好啊但是其他与秩序松散耦合的东西呢?客户信息是否仅可从CustomerRepo获得,而卖方的银行请购单是否可从BankRequisitesRepo获得,等等。?如果它是正确的,我们应该将所有这些存储库传递给我们的createfactory方法 是的。通常,域驱动设计术语中的每个主要实体聚合根都应该有自己的存储库。子实体*如订单行一般不需要 是的。将每个存储库

Domain driven design CQRS骨料

我是CQRS/ES领域的新手,我有一个问题。我正在开发一个使用事件源和CQR的发票web应用程序 我的问题是——据我所知,进入系统的新命令(比如ChangeLineItemPrice)应该通过域模型,以便它可以被验证为合法命令(例如,检查该行项目是否确实存在,价格是否违反任何业务规则等)。如果一切顺利(命令未被拒绝),则会创建并存储相应的事件(例如LineItemPriceChanged) 我不太明白的是,在尝试应用命令之前,如何在内存中保存这个聚合。如果系统中有一百万张发票,我是否应该在每次应

Domain driven design 当键不在事件中时,是否查找读取模型投影行?

我想在我的CQRS/ES应用程序中创建我的事件的新读取模型投影 问题是,我需要用于投影的密钥并不存在于我的所有事件中: 我的根是一辆汽车 第一个事件是包含“制造商”的CarCreated事件 然后我将有一个只举行“约会”的活动 我的新read projection是一家汽车修理厂,它将为每个制造商计算修理过的汽车: CarCreated事件没有问题:此事件保留de“manufacturer”,因此使用正确的键创建我的读取视图 问题在于我的CarRepaired事件:当我的事件中没有此信息时

Domain driven design CQRS读取模型投影-业务逻辑

所以,我在聚合根上触发了这个命令,该命令导致大约10个事件发生。这些事件是内部事件,由于外部系统需要这些事件的聚合,我决定进行投影(基本上阅读投影)。为了将10个事件(内部)预测为1个事件(外部),我必须应用一些业务规则(关于事件合并的业务规则)。我应该把这些规则放在哪里,因为它似乎是领域的一部分,但我正在创建内部事件的预测 基本上,由于投影逻辑是域的一部分,我是否应该将其保存在聚合中,并在进行投影的代码中调用它 更新 因此,在一个聚合根中,我有3个事件(内部)作为对一个命令(aggregate

Domain driven design 在ddd中设计特定特性

响应特定域的字符串解析器应该被视为实用程序还是域/值对象 示例:用户提交金融工具的搜索请求。例如OMX KR股票。为了将此类字符串提交给提供者,必须对其进行解析并映射到其确切值仪器名称、市场代码、仪器类型。搜索请求文件结构取决于工具类型,因此在解析字符串后,必须根据数据库中的现有类型检查工具类型。如果不存在,则无法提交搜索请求,用户必须收到相应的响应 这与您可能期望的搜索略有不同。用户提交搜索请求。应用程序通过生成请求文件,通过FTP向外部提供商提交搜索请求。一段时间后,请求得到满足,并从FTP

Domain driven design DDD随时间处理聚合更新

使用事件源,我有一个聚合应该不时更新的域。当我创建一个聚合时,我有一个到期时间(这可以是任意的),在此时间之后,我必须更新实体的一些属性。(也可以使用UpdateCommand强制执行此操作。)我考虑的过程很少: 创建聚合后,我将聚合ID和到期时间存储在RDBMS中 在cron作业中,我查询数据库中过期的聚合,并提交UpdateCommand 其他包括从读取端发出updateCommand(或events?)。 使用传奇来协调更新,这与第一个类似。但不管怎样,我都必须存储过期时间 因此,我必须以

Domain driven design 如何使用EventStore在银行账户之间进行DDD风格的资金转账?

我们有一个帐户A和一个帐户B。我们希望在A和B之间转移资金/资金。假设我们有一个帐户的聚合根。根据Eric Evan的书,我们需要一个域服务来处理传输逻辑。 为了IMMIDATE的一致性,我们需要在单个事务中修改帐户A和帐户B。是否可以使用EventStore在单个事务中写入两个不同的流(帐户A和帐户B) 是否可以使用EventStore在单个事务中写入两个不同的流(帐户A和帐户B) 截至V5 RC1(2018年12月),我找不到任何证据表明事件存储支持对多个事件流的协调写入 假设您的数据模型是

Domain driven design 在事件源环境中,重新水化聚合根及其关联实体的最佳方法是什么

我已经在SO中看到了有关重新水化聚合根的信息,但我之所以发布这个问题,是因为我在SO中没有找到任何关于在事件源框架的上下文中使用的信息 在使用事件源和CQRS模式在应用程序的命令端进行操作时,是否发现或开发了如何重新水化聚合根的最佳实践 或者这更像是建筑师的“偏好” 我在YouTube上读了很多博客,看了很多会议报告,我似乎得到了不同的指导,这取决于我参加的是谁 一方面,我发现一些信息相当清楚地表明,开发人员应该创建聚合,以便在直接从事件存储中获取的事件上使用“应用”方法使自己水合 另一方面,我

Domain driven design DDD:在单个事务中创建具有共享生命周期的多个聚合

据我所知,每个事务只能修改一个聚合的一般规则,主要是为了并发性和事务一致性问题 我有一个用例,我想在一个事务中创建多个聚合:一个餐厅管理员、一个餐厅、一个菜单。它们看起来像一个单一的集合,因为它们的生命周期是同时开始和结束的:在域内创建一个没有餐厅的RestaurantManager是没有意义的,反之亦然;这同样适用于餐厅和菜单。此外,如果餐厅或餐厅管理员被删除(未注册),则应将它们一起删除 但是,我已经将它们拆分为单独的聚合,因为一旦创建,它们将单独更新,维护它们自己的不变量,我不想将它们全部

Domain driven design ddd中的多对多关系

我有两个实体Publisher和SocialAccount。SocialAccount包含多个帐户,如 推特、脸书等 1个发布者可以附加到多个社交帐户,1个社交帐户包含多个发布者,此社交帐户还与其他实体活动连接。我的意思是两者都是独立的实体 在创建发布者实例时,它不需要订阅社交帐户,它可以在后期订阅 我需要向publisher订阅一个或多个社交帐户。我该怎么做 如何将发布者和社交帐户之间的m-to-m关系转换为1-to-many关系。我不确定,因为我在许多地方读到,我们应该避免实体之间的M对M关

Domain driven design 解决贫血领域模型示例

我正在回顾我可以优化抵押计算工具设计的领域,主要是为了学习。在阅读了关于贫血的领域模型之后,我开始对创建富模型感兴趣,并注意到我当前的实现可能有贫血!以下是伪代码中的当前实现: class MortgageCalculator { Mortgage mortgage; // mortgage object containing loanAmount, interest rate, etc.; calculateMonthlyPayment(); // calculates monthly

Domain driven design CQRS中的非域模型更新

为了理解CQRS,我创建了一个小应用程序,它有命令执行器和事件源。据我所知,域模型中的更改是通过命令触发的。然后,域模型生成事件,以使用反规范化器更新读取模型 但在许多情况下,可能会有对域来说非常重要的更新。就像用户更改自己的个人资料图片一样。对于这些需求,最好的实现方式是什么 我相信使用命令会有点过分,因为域模型本身不会改变 我试图搜索这个问题,但没有找到答案…不要混合CQR和CRUD。有界上下文要么适合CQR,要么不适合。你最喜欢的项目可能不是。但是,一旦决定应用CQRS体系结构样式,就应该

Domain driven design DDD-域外持久性,如何命名?

我正在为我的第一个DDD应用程序建模,我被这个疑问困住了 在我的应用程序和基础结构层中,我有一些需要持久化的细节,但是,由于这些细节不是特定于域的,所以我不想将其命名为存储库。有人能帮我找出它的名字吗 谢谢。你应该再详细说明一下。。。为什么它没有建模?是否只是配置设置,模型范围之外的东西?比如原木等?我想到了一些名称:序列化、配置、设置等 考虑到您的评论,配置设置实际上与域模型正交,但支付网关设置可能在模型之外,也可能不在模型之外。Id取决于您正在编写的应用程序的类型。我相信,如果您正在编写一个

Domain driven design 域驱动设计-如何检查域对象中某个属性的唯一性

我正在使用领域驱动设计开发一个应用程序。我一直在使用的模式之一是存储库模式。为了简单起见,假设我有以下类和接口 Car-表示Car域概念的域类 public class Car { public int Id {get;private set;} public string SomeUniqueCode {get;private set;} } ICarRepository-用于添加、删除或保存对汽车对象的更改的界面 public interface ICarRepository{

Domain driven design 客户端是否应检查后条件/是否应调用方法检查前条件?

公共方法的先决条件和后决条件构成了该方法与其客户之间的合同 1.根据,调用方不应验证后置条件,被调用方法不应验证前置条件: 让我们回顾一下广场的先决条件和后决条件 根函数sqrt,如程序49.2所示。调用 sqrt负责向函数传递一个非负数。如果 传递负数时,平方根函数应执行以下操作 没什么好处理的。另一方面,如果一个非负 编号传递给sqrt,由sqrt负责交付 满足后条件的结果。因此,sqrt的调用者 不应采取任何措施来检查或纠正结果 如果操作的先决条件失败,则责怪调用方 如果操作的后置条件失败

Domain driven design 下游对象是否应该始终是聚合根?

,第233页: 有时下游上下文中的对象必须 最终与一个或多个骨料的部分状态一致 在上游环境中。在这种情况下,我们将在 下游消费上下文,因为实体用于维护 变化的连续性线索 作者认为,如果需要最终的一致性,那么下游对象应该始终是聚合根。是否有一个特别的原因,为什么它永远不应该被设计为一个内部实体 更新: 有人可能会争辩说,它们总是需要是根,以防止具有多个具有相同id的下游对象(即反映上游对象状态的对象),但是如果同步只是单向的(从上游到下游上下文),那么两个下游对象具有相同id真的没有问题吗 谢谢我

Domain driven design 跨有界上下文为同一事物调整不同标识符

同时,我了解到聚合根应该通过标识符显式连接,而不是通过与另一个AR的实际关联 如果由于技术原因,同一事物的标识符是不同的,因为我无法影响它们,该怎么办 以这张图片为例 资料来源: 假设支持上下文是一个完全不同的第三方系统,使用自己的标识符,而我无法以任何方式将标识符放入该系统中 因此,在我的销售环境中,我是标识符的主人,我的客户和产品都有我给出的标识符;我需要以某种方式将销售上下文的客户连接到支持上下文的客户 该调整将在何处进行?最有可能的地方是您控制的销售范围上下文的反腐败层。您可以保留一个简

Domain driven design 为什么将命令和事件限制为一个聚合?CQRS+;ES+;DDD

请解释为什么在执行CQR、ES和DDD时同时修改多个聚合是一个坏主意。是否有任何情况下,它仍然可以确定 以PurgeAllCompletedTodos等命令为例。我希望此命令导致一个事件,通过将IsActive设置为false来更新每个已完成Todo聚合的状态 为什么这不好 我能想到的一个原因是: 在更新域状态时,最好将事务限制在整个状态中定义良好的一部分,以便在更新期间只需对该部分进行写锁定。这样做将允许对不同的聚合进行并行写入,从而在某些极其繁重的场景中提高性能。问题的答案在于“聚合”的含义

Domain driven design 流和聚合的事件来源组织

在ES中组织活动流的最佳方式是什么。对于事件流,我指的是聚合的所有事件 假设我有一个项目,其中包含一些数据和任务列表 现在我有一个Guid作为AggregateID作为我的streamID。 到目前为止我能做到 ->使用该ID重新创建给定项目的状态 ->我可以用自定义投影组合项目列表 问题是如何处理待办事项? 这也应该在项目流id下处理,还是应该有自己的todo流id 如果一个todo有一个独立的流如何将它链接到所属的项目。对于给定的项目,项目如何识别所有待办事项流。 这意味着对待办事项列表的所

Domain driven design 如何为实体建模';DDD中的s属性

我有一个调查模型类,它有以下四个值对象: id creationDate 注释 答复日期 调查将在一段固定的时间后到期,比如说48小时。然后我需要建模,但我不知道放在哪里 在creationDate上,像一个方法已过期(现在:日期) 作为实体本身的一项功能,检查creationDate 其他解决方案 解决方案1 选项一和选项二的混合,下面是一个伪代码: class Survey { public bool hasExpired(now: Date) { creationDate

Domain driven design 电子邮件通知-在域对象或服务中?

我正在寻找关于如何解决以下设计问题的建议(使用一个基于stackoverflow的虚构示例)。我试图避免一个贫血的领域模型,并为这种类型的病例寻求一般的“最佳实践”建议 脚本: 假设正在为stackoverflow开发一个新功能,每当某个问题的所有者收到10票时,该功能会向其发送电子邮件通知 域对象模型如下所示: public class Question { string Question { get; set; } IList<Votes> Upvotes { g

Domain driven design 如何在DDD中实现CQRS的查询端?

我已经使用域模型和存储库实现了DDD的命令端,但是如何实现查询端呢 我是否为UI创建了一个全新的域模型,它保存在项目结构中的什么地方?在域层、UI层等等 另外,我应该使用什么作为我的查询机制,我应该专门为UI域对象创建新的存储库,而不是存储库,还是其他什么?根据我对CQR的理解,您可以创建一组DTO,以满足用户界面屏幕或可能需要使用它们的应用程序的要求 这在项目中的位置是基于需求的,因为这取决于您是否打算通过web服务公开这些DTO。 在这种情况下,我不会把它放在Web层,而是放在应用层或专用的

Domain driven design 领域驱动设计-定义角色的接口

我目前正在为一个新的应用程序开发一个域模型,并且已经到了需要定义与可能执行相同角色的不同类型的类之间的关系的阶段,我对定义这种关系的最佳方式感到困惑 例如: public class Car { public IDriver driver { get; set;} public IPassenger passenger { get; set; } } public class Person : IDriver, IPassenger { } public class Pet

Domain driven design 域驱动设计:是否应向存储库方法传递配置字符串?

我从两方面都看到了这一点。在编写存储库时,方法应该以连接字符串的形式传递,还是repositpry应该是“自包含的”,换句话说,在内部知道如何访问数据库?如果有帮助的话,我的存储库不是真正的DDD,而是围绕调用Oracle SP的方法的存储库模式(这就是ar的工作方式)?存储库通常不应该在自己的独立事务单元中工作,因此它们最常使用“现有”数据库连接。这样,您可以在一个事务中执行多个存储库(数据库!)操作 如何实现这一点取决于您的开发平台。例如,javaee有将当前实体管理器注入对象的方法,也有通

Domain driven design 保存表中的值对象列表

我在azamsharp面临的和中有类似的场景 由于注册是值对象,并且用户可以拥有值对象列表,所以如何将此注册保存在用户表中,因为用户和注册之间存在1到M的关系。我是否必须为注册创建单独的表。DDD或无DDD,如果您有1-M关系,最干净的解决方案是单独的注册表,将FK返回给用户 仅仅因为注册是值对象,并不意味着您有将它们保存在用户表中。这是DDD新手常见的误解。可能会有帮助。谢谢Vijay,但是我的注册表可以有ID作为代理键,或者只有外键指向用户表,因为本文说我们不应该在值对象表中有ID,答案只适

Domain driven design 当从订单中删除行项目时,跨有界上下文进行事务处理可以吗?

在我的领域中,我有两个与此问题相关的有界上下文: 采购-客户订购服务的地方 履行-将服务分配给要完成的供应商 在订单的整个生命周期中,客户需要在任何给定的时间对订单进行编辑 如果客户从订单中删除服务(即在采购上下文中),如果该服务已分配给要执行(但尚未执行)的供应商,则该服务也必须在履行上下文中删除 这里有几个选择,我想听听社区的意见: 我的上下文错误,因为这将创建跨上下文事务 在这里,我可能不需要事务一致性。当然,这要由业务涉众来决定,这就引出了两个问题:实现选项是什么?我如何向业务干系人提出

Domain driven design DDD与数据导出系统

我是DDD的初学者,在体系结构方面遇到了一些小问题 我们的系统必须能够以各种格式(Excel、Word、PDF和其他更奇特的格式)导出业务数据 在您看来,哪一层必须负责检索源数据、以目标格式导出源数据以及为用户准备最终结果的整个过程?我混淆了域和应用程序的责任 关于导出子系统,实现和它们的公共接口契约是否应该属于基础架构层?我通常尽可能采用简单的方法 域代码实现域的语言-名词、动词等 应用程序代码使用此语言创建诗歌 因此,在您的示例中,输出的构造是应用程序关注的问题,而应用程序将要讨论的位的构造

Domain driven design 在不将数据加载到内存的情况下实现大型集合实体

我正在实现一个实体UserImages,方法包括addImage($imageId),removeImage($imageId),getImages($from,$count) 实际上,存储在应用程序级存储器中的数据(图像ID的集合),它提供了很好的功能,如添加项($keyName,$item,$weight),删除项($keyName,$item),获取项($key,$from,$count) 如何使model以DDD样式使用此外部(从域中查看)存储,而不引用来自UserImages实体的存储

Domain driven design 在域驱动设计中实现安全性的层?

在领域驱动的设计体系结构中,哪一层是 实施安全(访问控制)? 该层中的结构将如何改变? 它将是交叉的?身份验证几乎总是在应用程序层进行。DDD是关于建模不变量的,您的业务专家谈到了这些不变量,并且这些不变量可能会发生变化。像身份验证这样的东西通常不会出现在业务专家的雷达上,而是被视为给定的。此外,身份验证的逻辑不太可能改变 授权有点棘手。有时,您确实需要将其引入域层,因为您的业务专家会谈到授权。例如“在经理和区域经理签字之前,订单无法发布”。对我来说,这就是域逻辑,因为它是一种不变的,并且是一种

Domain driven design 域驱动器设计与命令模式&x2014;相互排斥?

tl;博士: 我喜欢命令模式的小型集中类,如SetProjectAsActiveCommand,但我也喜欢DDD让模型负责自己的核心业务功能的方法,如调用Project::setAsActive()这两种想法可以一起工作,还是它们是相互排斥的体系结构? /tl;博士 在过去的几个月里,我一直在做一个项目,在这个项目中,我们一直在使用命令模式,它有像ProposeNewProjectCommand,SetProjectAsActiveCommand和AddCommentToProjectComma

Domain driven design 如何控制事件驱动体系结构中消息的幂等性?

我正在从事一个项目,其中DynamoDB被用作数据库,应用程序的每个用例都由在数据库中创建/更新项目后发布的消息触发。目前,该准则遵循以下方法: repository.save(entity); messagePublisher.publish(event); Udi Dahan有一段视频,名为《无分布式事务的可靠消息传递》,他在视频中谈到了一种解决方案,解决了系统在保存到DB之后,但在发布消息之前,由于消息不是事务的一部分而可能发生故障的情况。但在他的解决方案中,我认为他假设使用SQL数据库

Domain driven design 使用CQRS DDD在事件后循环命令

比方说,当我删除一个街区时,我想删除该街区的所有房屋(我真的给出了一个随机的例子)。我想知道的是,在事件发生后链接一组命令的最佳实践是什么: (一) deleteNeighborhood命令从任何入口点发出 deleteNeighboryCommandHandler被触发,删除邻居并分派NeighboryDeleteDevent DelteHouseSWhenNeighborDeletedEventListener被触发时,从相关邻居查询所有房屋并逐个发送DeleteHouseCommand

Domain driven design 在DDD中,价值对象的实际优势是什么?

到目前为止,我了解到实体对象有一个ID,而值对象没有,但在最常见的示例中,您有一个person实体,它附带了一个address-value对象。创建一个单独的address对象而不仅仅是将address属性保存在Person实体中的最大优势是什么?将其视为一个可重用的组件。你可以把它变成家庭住址,工作住址,而无需付出太多额外的努力。您可以使用它将其他系统与person实体分离。假设你介绍了一个商业实体。它还将有一个地址 与这个主题相关的是另一个重要主题:构图与继承 值对象可以用作其他类中其他方法

Domain driven design 对DDDS中的非根聚合进行操作(即搜索)

关于在领域驱动设计中使用聚合而非AR的问题 例如,使用熟悉的:Order aggregate root[AR]和OrderLine aggregate member[AM]即可。如果假设订单是持久化的,那么从DDD的角度来看,如何正确地对聚合成员进行操作 例如,我可以为给定项目的所有订单行搜索“查找”操作吗?正确的方法是什么?如果我将它们作为值对象返回,这似乎是错误的,实际上它们是持久化域对象。此外,我可能需要能够从其中一个获得订单。然而,如果我将它们作为实体对象从存储库层返回,那么我似乎违反了

上一页 1 2 ...  6   7   8   9    10   11   12  ... 下一页 最后一页 共 42 页