我正在编写一个类库作为DataModel。 DataModel能够处理所有与数据库相关的任务。我正在使用NHibernate和Fluent NHibernate。
现在出现的问题如下:
答案 0 :(得分:1)
我们是否应公开实体(POCO类)。
是的,否则当没人使用时会使用实体
将具有内部受保护属性和属性的实体作为接口公开是否有用。
这取决于!使用ORM时,内部受保护的属性没有问题,但我更喜欢将内部资源减少到最小,因为我喜欢保持自己状态的对象。接口很好
为映射创建的实体可以是WPF MVVM的模型。
当然。无需再次复制它们。这是持久性无知的原因
或者我们应该直接绑定实体吗?
更多的是,UI要求与持久性/业务规则非常不同,因此将有针对UseCases / Views的专用ViewModel。但是,引入列表的简单数据持有者(如Order class
)可以直接绑定(例如,使用DatabindingFactory使其实现INPC)
如果Library返回实体List作为API返回,则无法控制。所以任何人都可以在列表中添加或删除。我应该如何控制它。我应该创建从IList派生的代理,它将跟踪它。
列表只是在内存容器中。用户仍然需要通过API来保存/更新状态。
在API中抛出异常是否正确,或者我应该返回null
如果返回集合,那么空集合远远好于null。
然而,异常应该冒出来,最好包含在自己的可处理的异常中。实施NHibernate.Exceptions.ISQLExceptionConverter
(例如NHibernate.Test.ExceptionsTest.MSSQLExceptionConverterExample
)并使用例如config.DataBaseIntegration(db => db.ExceptionConverter<MyExceptionConverter>())
进行配置
{{1}}
继续登录图书馆
是否合适?
是绝对。 Logging可以调试已部署的应用程序(流畅)NHibernate已经有很多内置的日志记录,如果可能的话。
答案 1 :(得分:1)
我们是否应公开实体(POCO类)。
是的,创建包装器类需要付出更多努力。
将具有内部受保护属性和属性的实体作为接口公开是否有用。
是的,Setter和非暴露属性是控制。
为映射创建的实体可以是WPF MVVM的模型。
对于原始类型可以,但引用可以通过接口公开。
或者我们应该直接绑定实体吗?。
如果创建了Model,则直接使用POCO对象。它对刷新案例更加灵活。如果取消操作,则用户无法更改POCO对象的属性。
如果Library返回实体List作为API返回,则无法控制。所以任何人都可以在列表中添加或删除。我应该如何控制它。我应该创建从IList派生的代理,它将跟踪它。
IEnumerable用于通过接口公开集合。
在API中抛出异常是否正确,还是应该返回null?
让用户了解错误会更好。但将异常包装在用户可读而非返回的NHibernate异常中。
继续登录图书馆
是否合适?
记录是了解问题的非常好的功能。