Domain driven design 有人在NWorkspace模式方面取得了成功吗?

Domain driven design 有人在NWorkspace模式方面取得了成功吗?,domain-driven-design,ddd-repositories,Domain Driven Design,Ddd Repositories,我刚刚开始钻研我的第一个域驱动器设计实验,我正在利用NWorkspace模式。这个模式似乎很有意义,但是我还没有找到很多成功使用这个模式的地方的例子,甚至没有公开的文档。在我深入研究我的实现之前,我想知道是否有人成功地使用了这种模式,或者是否有人可以向我指出在我可以学习的任何开源项目中使用了NWorkspace的任何参考资料。对于这种模式,还有更好或更知名的替代方案吗 关于NWorkspace的简要背景信息 对于那些可能不熟悉NWorkspace的人来说,它是一种抽象查询和持久性职责的模式。Ji

我刚刚开始钻研我的第一个域驱动器设计实验,我正在利用NWorkspace模式。这个模式似乎很有意义,但是我还没有找到很多成功使用这个模式的地方的例子,甚至没有公开的文档。在我深入研究我的实现之前,我想知道是否有人成功地使用了这种模式,或者是否有人可以向我指出在我可以学习的任何开源项目中使用了NWorkspace的任何参考资料。对于这种模式,还有更好或更知名的替代方案吗

关于NWorkspace的简要背景信息


对于那些可能不熟悉NWorkspace的人来说,它是一种抽象查询和持久性职责的模式。Jimmy Nilsson在其《应用域驱动设计和模式》一书中展示了如何使用NWorkspace来抽象DDD存储库的基础设施部分,以及提供一种机制来执行与持久性相关的跨存储库原子性

他似乎在为读写存储库推荐单独的接口。
我没有使用所描述的模式的经验,但我建议不要使用跨存储库事务。相反,我想提出一些在DDD社区中流行的解决方案(Eric Evans、Udi Dahan、Greg Young),它们确实帮助了我:

  • 始终在聚合根上使用渴望加载。这样,您就不需要跨存储库原子性,并且在持久化该对象时更容易弄清楚发生了什么变化
  • 使用单独的类进行编写(即域类)和读取(即viewmodel)。创建视图模型存储库,直接从数据库检索视图模型(而不是将域对象映射到视图模型类)

  • 看看实现上述两项功能是否可以简化您的设计。

    他似乎建议为读写存储库提供单独的接口。
    我没有使用所描述的模式的经验,但我建议不要使用跨存储库事务。相反,我想提出一些在DDD社区中流行的解决方案(Eric Evans、Udi Dahan、Greg Young),它们确实帮助了我:

  • 始终在聚合根上使用渴望加载。这样,您就不需要跨存储库原子性,并且在持久化该对象时更容易弄清楚发生了什么变化
  • 使用单独的类进行编写(即域类)和读取(即viewmodel)。创建视图模型存储库,直接从数据库检索视图模型(而不是将域对象映射到视图模型类)

  • 看看实现上述两件事是否可以简化设计。

    第二个建议对我来说似乎有点陌生,听起来好像ViewModel被视为聚合根。你能给我指一下进一步讨论这个问题的资源吗?除了这里关于堆栈溢出的一点讨论之外,我还没有找到更多关于DDD的最新讨论,所以任何其他资源都会非常有用。当然。你想了解的主要男人是乌迪·达汉和格雷格·杨。他们在skillsmatter.com上有视频演讲,这是极力推荐的。也可以访问cqrsinfo.com。我在上面#2中描述的技术称为CQRS(命令查询责任分离)。它是由前面提到的Greg Young发明的。CQR的基本思想是,您的域类(至少是公开的)大多是没有公共setter和很少有公共getter的方法。所有的阅读都是通过viewmodel完成的,它几乎都是公共的getter和setter。有趣的是,我一定会研究这些主题。我很久以前就听说过CQR,我在方法设计中使用它作为指导原则,但是减少域模型作为支持ViewModel的数据存储的数量的想法是有意义的,尽管我不确定这会如何影响域本身的重要性。因此,基本上,如果域模型仅为写入目的而调用,那么它的预期寿命有限,因此,大部分域模型应该能够被写入一系列方法调用,而不是以面向对象的方式对域进行建模。。。好吧,这只是我最初的想法。当您开始与UI中所需的内容(例如,如果您需要来自一个网格中的两个聚合的数据)和您希望对域行为建模的方式发生冲突时,您可能会发现这一好处。第二个建议对我来说似乎有点陌生,听起来好像ViewModel被视为聚合根。你能给我指一下进一步讨论这个问题的资源吗?除了这里关于堆栈溢出的一点讨论之外,我还没有找到更多关于DDD的最新讨论,所以任何其他资源都会非常有用。当然。你想了解的主要男人是乌迪·达汉和格雷格·杨。他们在skillsmatter.com上有视频演讲,这是极力推荐的。也可以访问cqrsinfo.com。我在上面#2中描述的技术称为CQRS(命令查询责任分离)。它是由前面提到的Greg Young发明的。CQR的基本思想是,您的域类(至少是公开的)大多是没有公共setter和很少有公共getter的方法。所有的阅读都是通过viewmodel完成的,它几乎都是公共的getter和setter。有趣的是,我一定会研究这些主题。我很久以前就听说过CQR,我在方法设计中使用它作为指导原则,但是减少域模型作为支持ViewModel的数据存储的数量的想法是有意义的,尽管我不确定这会如何影响域本身的重要性。因此,基本上,如果域模型仅为写入目的而调用,那么它的预期寿命有限,因此