我想我在这里陷入僵局。我有一个我使用FluentNHibernate(ORM)/ SQLite(文件数据库)从头开始构建的应用程序。我决定实施工作单元和存储库设计模式。我正处于需要考虑最终游戏的地步,它将作为WPF Windows应用程序(使用MVVM)开始,并最终实现Web服务/ ASP.Net作为UI。
现在我已经为ORM创建了域对象(实体)。现在我不知道如何在ORM之外使用它。有关它的问题包括:
答案 0 :(得分:3)
要回答问题的第一部分,是的,您的业务逻辑和验证应该放在您的实体中。 NHibernate的观点是让你设计你的实体是无知的持久性。这意味着,如果您不关心持久性,您应该尽可能地设计实体。这并不完全可行,因为您很快就会发现(您需要将属性设置为虚拟以支持延迟加载,如果您想使用NHibernate Validator,您将使用验证属性来装饰您的属性),但在大多数情况下,NHibernate可以很好地避开你的方式。
至于是否使用您的实体作为模型,您将获得混合评论。理想情况下,您可以创建单独的viewmodel类,并从实体映射到viewmodel,以便您的视图只能访问所需的最少信息。这在预防N+1 access issues方面也有很长的路要走。然而,这样做往往是一个巨大的痛苦。当然,像AutoMapper这样的工具可以让您更轻松地将实体属性转换为视图模型。