- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我还没有看到在存储库模式实现中使用更改事件,但我希望我的存储库是这样的:
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/
我有一个单独的 Customer 模型的 View ,该模型在构造时获取一个客户和客户集合。客户模型的需求是有道理的——它是客户的 View 。收藏的要求……我不确定那是不是一种气味,希望得到反馈!
我试图在不同的风格中使用相同的 activity 名称,并为每种风格安装正确的名称。 build.gradle : android { .... buildscript {
我是一名优秀的程序员,十分优秀!