大家觉得哪种封装更好
DuDu借首页一用。。。希望不要把这个贴移走了,我想知道下大家的想法如何。多谢了。
小弟看到有的持久层框架是把实体类操作的接口放在每个实体类中,比如ActiveRecode。假设要对Order类型的实体对象和User类型实体对象进行修改操作,代码就像这么写:
Order.Update(_orderObj); //假设前面已经声明一个Order类型对象_orderObj
User.Update(_userObj); //假设前面已经声明一个User类型对象_userObj
User.Update(_userObj); //假设前面已经声明一个User类型对象_userObj
而有的持久层框架是把操作接口放在一个公用的持久层类中,同样假设要对Order类型对象和User类型实体对象进性修改操作,代码就像这么写:
DataProvider<Order>.Update(_orderObj); //假设前面已经声明一个Order类型对象_orderObj
DataProvider<User>.Update(_userObj); //假设前面已经声明一个User类型对象_userObj
DataProvider<User>.Update(_userObj); //假设前面已经声明一个User类型对象_userObj
我个人认为把操作放在实体类里代码可以更直观,但是感觉又有些职责越界了,似乎类似这些操作不是实体类应该具有的。但是又很难下一个定论,不知道博客园的各位大哥是怎么认为的。希望听听大家的意见。
另外从上篇帖子《轻量级持久层框架的讨论》各位大哥的踊跃发言让我对我的持久层框架又有了新想法。
henry兄提出可以用CodeDom代替反射以提高效率,并且附上了他的文章《利用CodeDom来解决反射性能问题》,从中我获得了一些灵感。我可以使用CodeDom把用于动态生成Sql语句与为实体对象赋值的代码生成在内存中,这样我就可以抽象出一个通用的DataProvider并且又不会因为使用反射而影响系统整体执行效率。关于这一点大家有什么看法和意见也可以继续提出。