假设我的WinForms应用程序有一个业务实体 Order,该实体在多个视图中使用,每个视图处理应用程序中的不同域或用例。例如,一个管理订单,另一个挖掘一个订单并显示附加数据。
如果我使用 nHibernate(或任何其他 ORM)并为每个视图(或每个 db 操作)使用一个 session/dataContext,我最终会为同一个 Order 获得两个不同的实例(假设 orderId = 1)。尽管在功能上是相同的实体,但在技术上它们是两个不同的实例。是的,我可以实现 Equals/GetHashcode 以使它们“看起来”相同。
为什么要为每个实体使用单个实例,而不是为每个视图或每个用例选择私有实例?
拥有单个实例具有共享 INotifyPropertyChanged 事件和共享其他(非持久性)数据的优势。
在每个视图中都有一个私有实例将为您提供视图级别上撤消功能的灵活性。在上面的示例中,我允许用户更改订单详细信息,并给予他们不保存更改的灵活性。在这里,视图/用例之间的同步发生在数据持久性级别。
你的论点是什么?