大家评下 entity framework 与 NHibernate 优缺

GavinKeng 2011-08-15 10:07:06
如题
最近企业为了快速开发需要选择一种框架 希望能达到对代码的侵入性最小
大家评下
...全文
568 33 打赏 收藏 转发到动态 举报
写回复
用AI写文章
33 条回复
切换为时间正序
请发表友善的回复…
发表回复
dewson 2011-08-24
  • 打赏
  • 举报
回复
MARK...
porschev 2011-08-21
  • 打赏
  • 举报
回复

ORM框架就用过Mybatis。。。
jincaomao 2011-08-21
  • 打赏
  • 举报
回复
我个人觉得 entityframework 4.1里面的code fist还是很有意义的。

里面可以通过流畅api单独定义实体数据和存储之间的关系,实际上就相当于以前的数据设计了。


况且实际做项目的时候,不论是view、bll、dal 都有单独的实体数据格式,每层之间数据之间都有关系(一一映射、组合、继承等),但是并不是完全依赖。

况且entityframework生成的sql执行并不慢,所以我觉得挺好的。
theillusion 2011-08-21
  • 打赏
  • 举报
回复
飞翔大侠是不是说,通过定义原语操作把业务流程固定下来?

也不晓得载体是Product还是Material
更不知道组织机构是Customer还是Supplier


我关心的是具体的Product,Material,Customer,Supplier的持久化实现
bfmpdcnui 2011-08-21
  • 打赏
  • 举报
回复
都不敢用,太繁琐,用处不大
--缪军-- 2011-08-21
  • 打赏
  • 举报
回复
[Quote=引用 28 楼 theillusion 的回复:]
我关心的是具体的Product,Material,Customer,Supplier的持久化实现
[/Quote]

类以职责为主体,而不是属性,假设需要设计N个product查询,他们的查询条件和输出字段都不相同
代码可以像是这样:
Method{MethodId,MethodName,Collection<Params>,Collection<DataKeys>...}
使用的时候:
Method ProductSearch1 = new Method("ProductSearch1");
DataTable Product1 = DAHelper.GetDataTable(ProductSearch1);
或者:JsonTable Product1 = DAHelper.GetJsonData(ProductSearch1);
CalvinR 2011-08-20
  • 打赏
  • 举报
回复
没怎么用过 顶帖!!!
种草德鲁伊 2011-08-19
  • 打赏
  • 举报
回复
又来了,我知道那是谁的马甲了。
theillusion 2011-08-19
  • 打赏
  • 举报
回复
飞翔大哥叙述的太抽象,能不能贴几个图说明一下
--缪军-- 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 23 楼 gengzhijun 的回复:]

引用 22 楼 moneysoft 的回复:
你是这样会不会 设计的太过了 很多时候使用ORM是为了更敏捷的开发 当然设计的东西越通用越好 你要知道 基本做不到 你这个项目设计的东西到下个项目还能用的 我指的的业务逻辑那块
[/Quote]

程序员不承担设计重用的问题,那是架构师的职责,架构师的日常任务就是重构,
所有重构的任务都是扩展企业库,
我指的重构,是完全独立的开发任务,并不回去修改任何已有的项目代码,
不存在"你这个项目设计的东西到下个项目还能用的"这种说法
GavinKeng 2011-08-19
  • 打赏
  • 举报
回复
[Quote=引用 22 楼 moneysoft 的回复:]
你定义一个单据业务的时候,并不知道他是什么单据,
也不晓得载体是Product还是Material
更不知道组织机构是Customer还是Supplier
只是针对行为或者说职责去设计,
这样,你设计出的业务可以重复使用在90%的单据处理,
不管他是采购计划,采购订单,入库单,销售订单,预售订单
[/Quote]

你是这样会不会 设计的太过了 很多时候使用ORM是为了更敏捷的开发 当然设计的东西越通用越好 你要知道 基本做不到 你这个项目设计的东西到下个项目还能用的 我指的的业务逻辑那块
--缪军-- 2011-08-18
  • 打赏
  • 举报
回复
你定义一个单据业务的时候,并不知道他是什么单据,
也不晓得载体是Product还是Material
更不知道组织机构是Customer还是Supplier
只是针对行为或者说职责去设计,
这样,你设计出的业务可以重复使用在90%的单据处理,
不管他是采购计划,采购订单,入库单,销售订单,预售订单
--缪军-- 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 20 楼 theillusion 的回复:]

[/Quote]
你处理业务的时候,根本就不需要关心数据的东西
theillusion 2011-08-18
  • 打赏
  • 举报
回复
说个具体点的,比如下面的类,是否需要写持久化代码,对象间的关联如何处理?

Product
Order
OrderLine
Customer

--缪军-- 2011-08-18
  • 打赏
  • 举报
回复
我想,我不要再次重复了,
业务逻辑和数据之间不存在映射关系,你非要让他们对应起来做什么?
theillusion 2011-08-18
  • 打赏
  • 举报
回复
楼上大哥,针对接口编程是好的,但是在实现他之前,程序不能运行。我的意思是在实现的时候,不存在阻抗失谐?
--缪军-- 2011-08-18
  • 打赏
  • 举报
回复
你不能因为code中出现UserName,就认为和DB中的UserName存在映射关系,那只是巧合
事实上,一个业务对象很可能访问多个数据源,
而一个数据源也可能被多个业务对象访问,
很多设计体系中,类似仓位,牌价,账户余额,库存数量,实际上数据库中根本就没有哪个字段对应
--缪军-- 2011-08-18
  • 打赏
  • 举报
回复
[Quote=引用 15 楼 theillusion 的回复:]

楼上大哥,他们两者之间没有依赖,这个是怎么做到的?阻抗失谐在你的项目里不存在?
[/Quote]
兄弟,我14楼已经说了:
[Quote=引用 14 楼 moneysoft 的回复:]
...
SOLID平时谁都会说,到实践当中就不知道用了,
Code和DB都依赖于设计文档接口,
[/Quote]
theillusion 2011-08-17
  • 打赏
  • 举报
回复
楼上大哥,他们两者之间没有依赖,这个是怎么做到的?阻抗失谐在你的项目里不存在?
--缪军-- 2011-08-17
  • 打赏
  • 举报
回复
1.敏捷生产是对所有先进的生产手段的统称,并不特指某种技术,
2.微软的ADO本来就是数据对象的统一描述和通用的数据访问层,
它是数据特征无关的,项目无关的,
你还能找出哪一种编程模型更加符合面向对象设计的要求
3.之所以会有ORM或者NH之类的说法,
是因为有些人非要说:DB映射Code或者Code映射DB,
其实更好的设计方案是:他们两者之间没有依赖,
你可以编写Code而不需要知道什么数据库,
同时,做数据库开发的也不需要知道有什么代码约定,
SOLID平时谁都会说,到实践当中就不知道用了,
Code和DB都依赖于设计文档接口,
只有一个原因才导致Code或者DB的迭代,那就是设计文档接口的迭代
加载更多回复(13)

13,347

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 .NET技术前瞻
社区管理员
  • .NET技术前瞻社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧