gpt4 book ai didi

domain-driven-design - DDD 存储库可以是有状态的吗?

转载 作者:行者123 更新时间:2023-12-04 08:22:07 25 4
gpt4 key购买 nike

我正在设计一个运输应用程序并尝试使用 Clean Architecture。我试图找出在何处保存 Shipment 对象的状态,以便每次用户单击 UI 中的按钮时都不必重新实例化新对象。这是流程。

  • 用户在 UI 中输入送货编号
  • UI Controller 处理 UI 事件并实例化用例交互器的实例
    一种。传递给用例交互器的构造函数的存储库实例
  • 用例交互器通过调用工厂(例如 CREATE_BY_DELIVERY)来实例化 Shipment 的实例。工厂调用 Repository 从数据库中收集数据。
  • 交付数据填充在 UI 上
  • 然后用户单击“报价报价”按钮
  • UI Controller 处理按钮点击事件并调用 Use Case Interactor 的 RATE_QUOTE 方法
    一种。用例交互器是否需要像步骤#3 中那样再次调用 Shipment 工厂,或者用例交互器是否可以获得在步骤 #3 中已经创建的 Shipment 对象的实例?
  • 费率显示在 UI
  • 然后用户单击“处理发货”按钮
  • UI Controller 处理按钮点击事件并调用 Use Case Interactor 的 PROCESS_SHIPMENT 方法
    一种。用例交互器是否需要像步骤#3 中那样再次调用 Shipment 工厂,或者用例交互器是否可以获得在步骤 #3 中已经创建的 Shipment 对象的实例?

  • 运输对象的状态应该是 UI Controller 、用例交互器还是存储库上的实例变量?理想情况下,我想将它保存在某个地方,这样每次用户单击 UI 上的按钮时我都不需要继续创建新对象。

    先感谢您!

    最佳答案

    Can a DDD repository be stateful?



    是的,绝对 - 这是原始描述中要点的一部分

    A REPOSITORY represents all objects of a certain type as a conceptual set (usually emulated). It acts like a collection, except with more elaborate querying capability.... For each type of object that needs global access, create an object that can provide the illusion of an in memory collection of all objects of that type.



    换句话说,重点是将应用程序组件与集合的实现细节分开。就应用程序而言,存储库可以实现为有状态的、内存中的键/值存储。

    Ideally, I'd like to save it somewhere so I don't need to keep creating a new object every time a user clicks a button on the UI.



    为了让您的代码易于理解,您可能应该每次只创建一个新对象,并且只有在您有明确的业务案例时才处理缓存的复杂性。

    也就是说,存储库的实现绝对没有理由不能包含最近使用过的对象的缓存。您只需要愿意投资缓存失效策略。

    记住,Phil Karlton 多年前教过我们

    There are only two hard things in Computer Science: cache invalidation and naming things.

    关于domain-driven-design - DDD 存储库可以是有状态的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47839180/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com