.net数据层架构:用强类型化dataset和用实体类+数据访问方法的两种模式,哪种好?petSHop4.0为何没有用类型化dataset?
.net数据层架构:用强类型化dataset和用实体类+数据访问方法的两种模式,哪种好?petSHop4.0为何没有用类型化dataset?
------解决方案--------------------实体类+数据访问太OO了,大项目写起来慢啊,复杂啊,数据库还没完全OO啊,否则还用实体类做什么
DATASET用在大项目爽啊,方便啊
------解决方案--------------------不管是数据实体,还是DataSet,他们的作用无非都是作为数据传输的载体。
有几个因素是需要考虑的:
1.数据载体的大小
2.是否需要一些其他结构:Schema。
3.是否想通过属性的方式方便的存取数据。
等等,都是需要考虑的。
------解决方案--------------------PetShop4.0中.为何没用到DataSet呢?
它将实体层中的类声明为序列了.在数据层中使用SqlDataReader将数据库中相对应的列值赋给了实体类中的属性.因此而没有使用DataSet绑定控件,而直接绑定了相对应的实体!控件是可以绑定任何序列的
------解决方案--------------------个感觉区别不大,DATASET一条记录基本就相当于一个实体类了,只是表现形式不太一样而已
,而且强类型DATASET是跟数据库表对应的,用起来也比较方便了,有些配置类型的表,如果缓存的话,还是定义个实体类比较好,个人感觉
------解决方案--------------------我个人习惯实体类
强类型DataSet用不惯
------解决方案--------------------用数据集或用自己写的实体类.
由个人习惯
但关键是要强类型.
尤其是集合的强类型.
------解决方案--------------------以前我们也用强类型DataSet,现在个人认为如果有好的实体类工具,还使用实体类的好。
我最近作了一个小项目,采用了下面的实体类查询,感觉还是很好的。
//实体类 WFS
WFS wfs=new WFS ();
wfs.Name = "ORM Test. ";
wfs.MEMO = "Test Orm... ";
//实体数据处理类 DataWFS
DataWFS dwfs=new DataWFS (wfs);
dwfs.Insert ();
//获得插入的标示
int id=wfs.ID ;
//准备新 OQL 查询
dwfs.NewQuery (wfs);
//执行 OQL 查询
WFS[] wfsList =(WFS[])dwfs.GetList (dwfs
.Select (new object []{wfs.ID ,wfs.Name })
.Where (new Condition (dwfs).Equal (wfs.ID ,id)) );
wfs=wfsList[0];
Response.Write( "OQL:wfs.Name= ");
Response.Write (wfs.Name + ", ");
wfs.ID =id;
wfs.Name = "Orm,EDIT... ";
dwfs.Update ();
Response.Write ( "Update ");
dwfs.Delete ();
Response.Write ( "Delete ");
Response.Write (wfs.ID );
------解决方案--------------------类型化的dataset速度比较慢。可维护性与可扩展性都比较差,所以大型项目中基本都不考虑应用它。
------解决方案--------------------推荐看看这篇文章:
设计数据层组件并在层间传递数据
http://www.microsoft.com/china/msdn/archives/library/dnbda/html/BOAGag.asp
------解决方案--------------------Typed Dataset的性能不是很好,也不适合在服务边界中传输(SOA),不过确实方便,在小项目中很理想,实体类比较麻烦
------解决方案--------------------- 学习了