使用NHibernate创建数据库类库
我在写一个类库作为DataModel。 DataModel能够处理所有与数据库相关的任务。我使用NHibernate和Fluent NHibernate相同。使用NHibernate创建数据库类库
现在的问题如下:
- 我们应该揭露实体(POCO类)。
- 将具有内部受保护属性和属性的实体暴露为接口是否好?
- 为映射创建的实体可以是WPF MVVM的模型。
- 还是应该直接绑定实体?
- 如果库返回实体列表作为API返回值,则无法控制。所以任何人都可以在列表中添加或删除。我应该如何控制它。我是否应该创建来自IList的代理,该代理将跟踪它。
- 在API中抛出异常是正确的,还是应该返回null?
- 在图书馆保持登录状态好吗?
我们应该公开实体(POCO类)。
是的,创建包装类使得更多的努力。
将内部保护属性和属性暴露为接口的实体是否好?
是的,安装员和非暴露属性是控制。
为映射创建的实体可以是WPF MVVM的模型。
对于原始类型可以,但引用可以通过接口暴露。
还是应该直接绑定实体?
如果Model是直接使用POCO对象创建的。更新案例更加灵活。如果有取消操作,用户不能更改POCO对象的属性。
如果库返回实体列表作为API返回,则无法控制。所以任何人都可以在列表中添加或删除。我应该如何控制它。我是否应该创建来自IList的代理,该代理将跟踪它。
IEnumerable用于通过接口公开集合。
在API中抛出Exception是否正确或者我应该返回null?
例外情况会让用户知道错误要好得多。但将用户可读的异常封装到NHibernate异常中。
是它的图书馆保持良好记录
记录是很好的功能了解的问题。
我们应该公开实体(POCO类)。
肯定的,否则什么用的实体的时候没有人使用
是好有一个实体的内部保护财产和财产暴露的接口。
这要看!内部受保护的属性在使用ORM时不成问题,但我优先考虑将内部的东西减少到最低限度,因为我喜欢维护它们自己状态的对象。接口很好
为映射创建的实体可以是WPF MVVM的模型。
当然。不需要再次复制它们。这就是持久性的无知是为什么
或者我们应该直接绑定实体?
更多ofthen不是,用户界面的要求比持久性/ businessrules非常不同的,所以会有专门用于UseCases /浏览次数的ViewModels。然而简单的Dataholders像Order class
扔进列表可以直接(例如使用DatabindingFactory,使他们实现INPC)
没有控制,如果库返回实体的名单作为API返回的约束。所以任何人都可以在列表中添加或删除。我应该如何控制它。我是否应该创建来自IList的代理,该代理将跟踪它。
列表只是在内存容器中。用户仍然需要通过API来保存/更新状态。
是不是抛出异常的API中出现的或者我应该返回null
如果返回集合然后空集合远比空好。
但是,例外情况应该鼓起来,最好包裹在自己可手动的例外中。实施NHibernate.Exceptions.ISQLExceptionConverter
(例如像NHibernate.Test.ExceptionsTest.MSSQLExceptionConverterExample
)并且使用例如 config.DataBaseIntegration(db => db.ExceptionConverter<MyExceptionConverter>())
是它的图书馆
是绝对的好保持记录。记录功能可以调试已部署的应用(流利)如果可能的话,NHibernate已经有很多内置的日志记录了。
感谢Firo,需要协助异常处理????我应该直接抛出异常还是返回空集合。 – Deepak 2013-05-06 05:23:08
谢谢jugal ..... – Deepak 2013-06-06 05:56:31