gpt4 book ai didi

immutability - 存储库和不可变对象(immutable对象)?

转载 作者:行者123 更新时间:2023-12-01 00:07:24 24 4
gpt4 key购买 nike

我可能会因阻抗不匹配而注定要失败,但我正在尝试协调我在 IRepository 和不可变对象(immutable对象)中看到的示例。

我正在开发一个编目应用程序,其中数百个 Web 请求在产品的“工作集”上运行——整个目录的一个子集往往在任何给定时间都在发挥作用。

同时,我们的数据团队不断更新产品数据——新图片、更新价格、描述等。

在我看来,就性能而言,我最好将产品视为不可变的。它们由存储库加载和缓存,并且许多线程可以同时访问同一个产品对象。

但是这个想法似乎与我看到的许多使用 Update/Delete 方法的 IRepository 示例不同——只要线程可以写入产品,似乎我就会对比赛和其他讨厌的事情敞开心扉。

因此,我设想了一个“编辑器”模型,其中通过伴随的“编辑器”对象对实体进行更改,然后保持更改并强制重新加载相关产品以供所有人使用。产品永远不会改变 - 只是在外部“编辑”并重新加载。

这有道理吗?正如我所看到的那样,这可以与存储库一起使用吗?

最佳答案

存储库仅负责数据检索/存储。工厂负责创建新对象。

在您的情况下,不可变对象(immutable对象)是可以的。但是,您需要一些方法来使被取代的产品无效并将它们从存储库缓存中删除。在大多数情况下,任何悬空引用都可以忽略,因为它们在检索时有效。

在产品更新的情况下,您需要确保通过工厂创建新产品。您的存储库将仅包括三种操作类型:检索(或查找)、保存和取代。 Save 存储新产品的位置,该产品未更改。而取代将存储新产品,使旧产品无效并将其从缓存中清除。

就 C# 签名而言,我可以想象这两种存储方法具有以下外观:

void Save(Product product);

void Supersede(Product oldProduct, Product newProduct);

我希望这有帮助。

关于immutability - 存储库和不可变对象(immutable对象)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/751437/

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