我们是否应该公开实体(POCO 类)。
是的,否则当没有人使用时实体的用途是什么
拥有一个具有内部受保护属性和作为接口公开的属性的实体是否很好。
这取决于!使用 ORM 时,内部受保护的属性没有问题,但我更喜欢将内部内容减少到最低限度,因为我喜欢保持自己状态的对象。接口很好
为映射创建的实体可以是 WPF MVVM 的模型。
当然。无需再次复制它们。这就是持久性无知的目的
还是我们应该直接绑定实体?
通常,UI 要求与持久性/业务规则有很大不同,因此会有专门的 ViewModel 用于 UseCases/Views。然而像Order class
扔进列表这样的简单数据持有者可以直接绑定(例如使用DatabindingFactory使它们实现 INPC)
如果库返回实体列表作为 API 返回,则无法控制。所以任何人都可以在列表中添加或删除。我应该如何控制它。我是否应该创建从 IList 派生的代理来跟踪它。
列表只是在内存容器中。用户仍然需要通过 API 来保存/更新状态。
抛出 API 中发生的异常是否正确,或者我应该返回 null
如果返回集合,则空集合比 null 好得多。
然而,异常应该冒泡,最好包裹在自己的可处理异常中。实施NHibernate.Exceptions.ISQLExceptionConverter
(例如 like NHibernate.Test.ExceptionsTest.MSSQLExceptionConverterExample
)并使用例如配置它
config.DataBaseIntegration(db => db.ExceptionConverter<MyExceptionConverter>())
继续登录图书馆好吗
绝对。日志记录可以调试已部署的应用程序。(Fluent)NHibernate 已经有很多内置的日志记录,如果可能的话。