Tor*_*ørn 5 singleton domain-driven-design repository-pattern
快速提问:将我的域驱动设计风格的存储库实现为单例是一个好主意还是一个坏主意?为什么?
或者我应该使用依赖注入器容器来管理我的存储库并确定它们是否是单例?
我还在快速阅读DDD,并希望看到一些好的存储库示例.
我已经看到了几种方法可以做到这一点。
最常见的方法是使用依赖项注入将存储库注入到使用它们的对象中。通常这些是演示者或控制器类,但在某些情况下模型会调用存储库。通常,避免这种情况会更好。如果你可以使用双容器来做到这一点,那就去做吧。
您还可以使存储库实现单例模式。我会尽量避免这种情况,因为单例通常使用静态方法。这可能会使测试调用单例的代码变得更加困难。如果您必须以这种方式执行操作,那么请确保分离出调用单例的代码,并使用“手动”依赖项注入将单例注入到调用它们的类中。这消除了您原本会遇到的一些紧密耦合。
我见过一些存储库从未被调用的例子。当有人浏览模型中的对象图并请求未加载的对象时,模型只会引发一个事件,并且存储库对此事件做出反应。这样就不会调用存储库,并且它与模型完全解耦。我自己没有使用过这个架构,但它看起来很干净。