gpt4 book ai didi

c# - 存储库有更改事件是一种代码味道吗?

转载 作者:太空狗 更新时间:2023-10-29 23:33:56 28 4
gpt4 key购买 nike

我还没有看到在存储库模式实现中使用更改事件,但我希望我的存储库是这样的:

interface IEntityRepository
{
event EventHandler<EntityChangedEventArgs> EntityAdded;
event EventHandler<EntityChangedEventArgs> EntityRemoved;

IEnumerable<Entity> GetAll();
Entity GetById(int id);
}

这主要是因为我的实体只能从外部添加和删除,而不能由 IEntityRepository 的客户端添加和删除。

这样做是不是我对存储库模式的想法从根本上是错误的,或者我有一个有效的案例?

最佳答案

如果您打算使用 Fowler 的实际存储库模式,我会说是的。该模式旨在通过公开类似集合的接口(interface)来充当业务层和数据层之间的中介。。它并不是为了实际保存数据。也就是说,如果您只想创建一个包装 API 并在事情发生变化时公开事件的集合,请务必这样做。有时您不需要遵循预定义的模式。

如果您希望它成为一种模式,我会说它看起来更像是一个对象池或观察者模式。考虑 IObservable 使用 Reactive Extensions (Rx) 的情况.它将允许您对 PInvoke 层使用react,并强制您承担责任。代码实际上比事件更有效。通过使用事件,您必须维护此存储库,跟踪对象生命周期,可能使此存储库成为单例并为其提供一些线程管理。使用 Rx,您只需将操作推送到观察者的队列。

但最终,请使用您觉得最自然的方式。模式只是建议,并不总是存在于每个潜在的用例中。这是其中一个案例。

关于c# - 存储库有更改事件是一种代码味道吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7549394/

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