几个开源项目实体层实现方式比较

比较|项目

本文首发于博客园几个开源项目实体层实现方式比较
最近在看duwamish7,asp.net forums, dottext几个优秀的开源(微软官方)的项目
因我目前所处的技术水平的阶段的原因,我看这些项目程序,更加关注的是具体的实现
次之才是架构
我首先关注的是这个三个项目的实体层的实现方式,下面用简单的代码来比较几个项目
的不同实现方式,而后会做一些简单比较,限于个人水平有限,不能做深入的分析,还
请各位大虾点评一二!

实现代码:
一,asp.net forums :
实体类的实现:

public class User
{
private string _userName = string.Empty ;
private string _userPassword = string.Empty ;

public string UserName
{
get { return _userName ; }
set { _userName = value ; }
}

public string UserPassword
{
get { return _userPassword ; }
set { _userPassword = value ; }
}
}
集合类的实现:
public class UserCollection : ArrayList
{
public UserCollectionOfArrayList() : base() {}
public UserCollectionOfArrayList(ICollection c) : base(c) {}
}
二,dottext :
实体类的实现:基本同上,主要差别在于集合类的实现上
集合类的实现:
public class UserCollection : CollectionBase
{
public int Add(User value)
{
return this.List.Add(value);
}

public bool Contains(User value)
{
return this.List.Contains(value);
}

public int IndexOf(User value)
{
return this.List.IndexOf(value);
}

public void Insert(int index, User value)
{
List.Insert(index, value);
}

public void Remove(User value)
{
List.Remove(value);
}

// public new KeyWordCollectionEnumerator GetEnumerator()
// {
// return new KeyWordCollectionEnumerator(this);
// }
//
// public class KeyWordCollectionEnumerator : IEnumerator
// {
// //这个类是用来迭代类集合用,比如需要使用foreach遍历集合时需要实现此接口,在此处省列
// //具体实现可以参考dottext的实现方式
// }
}
三,duwamish7
这个项目是微软官方发布的,所以实体层的实现都是使用微软所推耸的ADO.NET技术
实体类和集合类是在一块实现的:
public class UserCollection : DataSet
{
public UserCollectionOfDataSet()
{
this.BuildDataTables() ;
}

private void BuildDataTables()
{
DataTable table = new DataTable("UserCollection");
DataColumnCollection columns = table.Columns;

columns.Add("UserName", typeof(System.String));
columns.Add("UserPassword", typeof(System.String));

this.Tables.Add(table);
}
}
简单分析 :
一,asp.net forums实体类没有什么好说的,主要是集合类是通过继承ArrayList来实现
集合类,这种实现方法是最简单快捷,但在性能会有一些损失,因为在使用该集合的时候,
需要不断的进行装箱(boxing)和拆箱(unboxing)的操作;

二,dottext实体类和asp.net forums基本上是一样的,但集合类是通过实现CollectionBase
来达到的,实现起来比较复杂和需要更多的代码量,但其实现的集合类是强类型的对象
在使用的时候并不需要进行装箱(boxing)和拆箱(unboxing)的操作,所以在性能上比
asp.net forums的实现方式优

三,duwamish7是使用类型化的DataSet来实现实体层,通常使用DataSet是很耗资源,
一般认为,小数据量的时候使用Collection会性能较优,大数据量使用DataSet性能较
优,但是很多时候,我们在做应用程序的时候,都是从数据库读取数据,一般都会在
存储过程中进行分页查询,只选取部分数据,可以说是小数据量了,如果仅仅从性能的
角度来做选择,个人倾向是类型化的DataSet不是最好的选择

时间: 2024-11-02 14:49:19

几个开源项目实体层实现方式比较的相关文章

【黑马Android】(05)短信/查询和添加/内容观察者使用/子线程网络图片查看器和Handler消息处理器/html查看器/使用HttpURLConnection采用Post方式请求数据/开源项目

备份短信和添加短信 操作系统短信的uri: content://sms/ <?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com.itheima28.backupsms" android:versionCode="1

Android开源项目分包方式学习(eoe、oschina、github)

总感觉Android中关于分包的文章很少,或者几乎可以说没有.但是合理地分包,又可以使整个项目模块化,减少包与包之间的依赖,让整个项目的框架更加清晰,更利于后续功能的拓展. 因为没有相关的文章,所以这里晒出三款开源项目的分包方式,供大家学习. (一) eoe社区 Android 客户端 src ├ cn.eoe.app --存放程序全局性类的包  ├ cn.eoe.app.adapter --存放适配器的实现类的包  ├ cn.eoe.app.adapter.base --存放适配器基类的包 

国内大公司的开源项目一览表

奇虎360 https://github.com/Qihoo360 1.MySQL中间层 Atlas Atlas是由 Qihoo 360,  Web平台部基础架构团队开发维护的一个基于MySQL协议的数据中间层项目.它在MySQL官方推出的MySQL-Proxy 0.8.2版本的基础上,修改了大量bug,添加了很多功能特性.目前该项目在360公司内部得到了广泛应用,很多MySQL业务已经接入了Atlas平台,每天承载的读写请求数达几十亿条. 主要功能:* 读写分离* 从库负载均衡* IP过滤*

优秀开源项目:MyXls

  主页:http://sourceforge.net/projects/myxls/  MyXls是用C#开源项目,可以应用于silverlight .asp.net 或者 .net应用程序上.它根据微软公开的Excle文档格式文件(BIFF),以二进制格式直接生成excel文档,支持Excel versions 97 - 2007. .这意味着可以不用在服务器上安装office就能够以excle格式输出数据库中存储的数据了.这对于许多项目来说都是很有用的.     目前MyXls已经实现了单

FAST:基于FPGA的SDN交换机开源项目

自1983年自由软件运动领袖Richard Stallman提出了GNU计划以来,开源为软件开发带来了创造性的革命和商业成功.SDN如今的快速发展也离不开开源社区的力量,比如NOX.Floodlight.OpenContrail.ONOS等开源项目极大的推动了SDN产业链的发展.但SDN的开源大多都局限在控制器或软件交换机的领域,数据平面的硬件开源项目始终没有迎来一个百花齐放的春天,同时在网络教学研究领域,也没有形成一个有序.规范.有创造力的生态圈,FAST的诞生或许可以提供一个崭新的思路. 他

最火的Android开源项目整理

一.代码库   1.from  代码家 整理比较好的源码连接   *************************************************************************************************************************************************************************** http://blog.zhan-dui.com/?page_id=60   感谢 "代码

使用开源项目的正确姿势,都是血和泪的总结!

软件开发领域有一个流行的原则:DRY,Don't repeat yourself,我们翻译过来更形象通俗:不要重复造轮子.开源项目主要目的是共享,其实就是为了让大家不要重复造轮子,尤其是在互联网这样一个快速发展的领域,速度就是生命,引入开源项目,可以节省大量的人力和时间,大大加快业务的发展速度,何乐而不为呢?   然而现实往往没有那么美好,开源项目虽然节省了大量的人力和时间,但带来的问题也不少,相信绝大部分同学都踩过开源软件的坑,小的影响可能是宕机半小时,大的问题可能是丢失几十万数据,甚至灾难性

java开源项目研究 3.许可协议介绍

项目     如果你只是想学习使用一下开源项目,那么你可以跳过本节(了解一下更好^_^),但是如果你想在自己的产品(不管是开源的还是商业的)中集成开源项目,那么你必须了解许可协议.        开源项目的License可以分为三大类:     OSI-Approved Open Source:被开放源码组织(www.opensource.org)所批准的开放源码授权协议.像大家经常看到的Apache,GPL,LGPL,MIT Licence,都属于OSI-Approved的授权协议,OSI 的

数10大经久不衰的开源项目

如今,开源项目无处不在,它们经历了诞生.兴盛.衰落等一系列过程,最终非常优秀的项目才得以存留并发展壮大.  一些人认为开源运动是近几年才兴起的,其实不然,开源项目甚至可以追溯到几十年前.比如,20世纪60年代的NASA COSMIC软件集合.  自由软件创始人Richard M. Stallman曾说,"当我1971年在麻省理工学院人工智能实验室工作时,我已经成为了软件共享社区的一部分,当时该社区已经存在很多年了".  本文将列出一些古老的.经典的开源项目,在这个名单中我只列出了目前仍