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

摘要:
最近我在看duwamish 7,asp Netforum和Dottext是一些优秀的开源项目。由于我目前的技术水平,我认为这些项目的程序更关注具体的实现,而不是架构。我首先关注这三个项目的实体层的实现。接下来,我将用简单的代码比较几个项目的不同实现方法,然后进行一些简单的比较。仅限于我的个人水平,无法进行深入分析,请评论一两只虾!

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

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

几个开源项目实体层实现方式比较第1张    public class User
几个开源项目实体层实现方式比较第2张几个开源项目实体层实现方式比较第3张    
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张        
private string _userName = string
.Empty ;
几个开源项目实体层实现方式比较第5张        
private string _userPassword = string
.Empty ;
几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张        
public string
 UserName 
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张            
get 几个开源项目实体层实现方式比较第4张return _userName ; }

几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张            
set 几个开源项目实体层实现方式比较第4张{ _userName = value ; }
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张        
public string UserPassword
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张            
get 几个开源项目实体层实现方式比较第4张return _userPassword ; }

几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张            
set 几个开源项目实体层实现方式比较第4张{ _userPassword = value ; }
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第31张    }

集合类的实现:
几个开源项目实体层实现方式比较第1张    public class UserCollection : ArrayList
几个开源项目实体层实现方式比较第2张几个开源项目实体层实现方式比较第3张    
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
public UserCollectionOfArrayList() : base() 几个开源项目实体层实现方式比较第4张{}

几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
public UserCollectionOfArrayList(ICollection c) : base(c) 几个开源项目实体层实现方式比较第4张{}
几个开源项目实体层实现方式比较第31张    }

二,dottext :
实体类的实现:基本同上,主要差别在于集合类的实现上
集合类的实现:
几个开源项目实体层实现方式比较第1张    public class UserCollection : CollectionBase
几个开源项目实体层实现方式比较第2张几个开源项目实体层实现方式比较第3张    
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张        
public int
 Add(User value) 
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            
return this
.List.Add(value);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张        
public bool Contains(User value) 
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            
return this
.List.Contains(value);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张        
public int IndexOf(User value) 
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            
return this
.List.IndexOf(value);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张        
几个开源项目实体层实现方式比较第5张        
public void Insert(int index, User value)    
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            List.Insert(index, value);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张        
几个开源项目实体层实现方式比较第5张        
public void Remove(User value) 
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            List.Remove(value);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张
//        public new KeyWordCollectionEnumerator GetEnumerator()    
几个开源项目实体层实现方式比较第5张
//
        {
几个开源项目实体层实现方式比较第5张
//
            return new KeyWordCollectionEnumerator(this);
几个开源项目实体层实现方式比较第5张
//
        }
几个开源项目实体层实现方式比较第5张
//

几个开源项目实体层实现方式比较第5张
//        public class KeyWordCollectionEnumerator : IEnumerator    
几个开源项目实体层实现方式比较第5张
//
        {
几个开源项目实体层实现方式比较第5张
//            //
这个类是用来迭代类集合用,比如需要使用foreach遍历集合时需要实现此接口,在此处省列
几个开源项目实体层实现方式比较第5张
//            //
具体实现可以参考dottext的实现方式
几个开源项目实体层实现方式比较第5张
//        }

几个开源项目实体层实现方式比较第31张
    }

三,duwamish7
这个项目是微软官方发布的,所以实体层的实现都是使用微软所推耸的ADO.NET技术
实体类和集合类是在一块实现的:
几个开源项目实体层实现方式比较第1张    public class UserCollection : DataSet
几个开源项目实体层实现方式比较第2张几个开源项目实体层实现方式比较第3张    
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张        
public
 UserCollectionOfDataSet()
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            
this
.BuildDataTables() ;
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张        
private void BuildDataTables()
几个开源项目实体层实现方式比较第9张几个开源项目实体层实现方式比较第10张        
几个开源项目实体层实现方式比较第4张
{
几个开源项目实体层实现方式比较第5张            DataTable table   
= new DataTable("UserCollection"
);
几个开源项目实体层实现方式比较第5张            DataColumnCollection columns 
=
 table.Columns;
几个开源项目实体层实现方式比较第5张            
几个开源项目实体层实现方式比较第5张            columns.Add(
"UserName"typeof
(System.String));
几个开源项目实体层实现方式比较第5张            columns.Add(
"UserPassword"typeof
(System.String));
几个开源项目实体层实现方式比较第5张
几个开源项目实体层实现方式比较第5张            
this
.Tables.Add(table);
几个开源项目实体层实现方式比较第18张        }

几个开源项目实体层实现方式比较第31张    }

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

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

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

免责声明:文章转载自《几个开源项目实体层实现方式比较》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇awk if 判断蓝牙BLE控制芯片(6) : 博通BCM20732下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

WINFORM--第三讲(下拉列表)

下拉列表:1.如何把选项放进去。手动放:不常用。使用代码放:(1).使用代码逐项添加a.造一个实体类:重写父类的ToString()方法,返回要显示的属性。b.使用实体造对象c.把对象添加到下拉列表的items集合中去。 案例:把民族表中的数据读取出来加载到下拉列表中去。a.准备实体类、链接类、数据访问类。b.在界面后台代码中,调用数据访问类,获取返回来的...

C# 对sharepoint 列表基本操纵

一、更新 using Microsoft.SharePoint; SPWeb site = SPControl.GetContextWeb(Context); SPListItemCollection items = site.Lists["ListName"].Items; SPListItem item = items.Add(); item["Fi...

不难懂------react---Immutable的基本使用

一、Immutable简介   Immutable Data 就是一旦创建,就不能再被更改的数据。对 Immutable 对象的任何修改或添加删除操作都会返回一个新的 Immutable 对象。Immutable 实现的原理是 Persistent Data Structure(持久化数据结构),也就是使用旧数据创建新数据时,要保证旧数据同时可用且不变。同...

dynamic-insert和dynamic-update属性

dynamic-insert 作用:设置对象中没有值的字段 insert并不会对其进行插入. 实体类映射配置如下 <!DOCTYPE hibernate-mapping PUBLIC "-//Hibernate/Hibernate Mapping DTD 3.0//EN" "http://www.hibernate.o...

springboot-easycode配置文件修改

网上抄的然后不能够使用,自己又改了该就可以了entity ##引入宏定义 $!define ##使用宏定义设置回调(保存位置与文件后缀) #save("/entity", ".java") ##使用宏定义设置包后缀 #setPackageSuffix("entity") ##使用全局变量实现默认包导入 $!autoImport import lo...

ViewPager+TabLayout+Fragment刷新Fragment中的数据

1.ViewPager与TabLayout的初始化: 1 private void initData() { 2 mTabFragmentAdapter = new TabFragmentFirstAdapter(getSupportFragmentManager(), mDeptType); 3 mVp.setAdapte...