最近在看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不是最好的选择

欢迎板砖和鲜花

几个开源项目实体层实现方式比较相关推荐

  1. 图解CodeSmith使用和实用教程一 - 入门和生成MIS项目实体层代码

    CodeSmith,也就是传说中的那个代码生成工具. 下载CodeSmith 6.5,可到我网盘下,链接在底部. 一 安装 1 解压,点击安装: 2 协议: 3 选择目录: 4 一路next完成. 5 ...

  2. 小团队项目管理开源工具_超越指标:如何在当今的开源项目中以团队方式运作

    小团队项目管理开源工具 传统上,我们如何看待社区健康和活力? 我们可能很快将主要涉及代码贡献的指标归零:有多少公司在贡献? 有多少个人? 多少行代码? 总的说来,这既涉及开发活动的水平,也涉及贡献者基 ...

  3. centos 6.8安装git_搭建一个开源项目3两种方式安装git

    一.开始工具的安装 1.git 安装git工具有两种方式,一种就是利用自带包管理工具,一种是源码编译安装 (1)由于CentOS已经具有包管理器因此只需要一行命令即可自动安装 yum install ...

  4. 热议:这样的开源项目,你会支持吗?

    来源:https://zhuanlan.zhihu.com/p/478412327 今天无聊刷GitHub看到一个让我血压上来的项目 乍一看,2.4k star,应该不像是什么小项目应该是比较有用的项 ...

  5. 重磅开源!推荐一个以最优惠的方式购买极客时间课程的开源项目!

    简介 以最优惠的方式购买极客时间的课程. 做为一名互联网人是要终身学习的,总是要学习很多知识点的,总是会买很多课程来学,但是很多课程都很贵,最终没有学到相应的知识点. 极客时间 是一个轻松学习,高效学 ...

  6. huggingface实操_盘点2018年度GtiHub开源项目TOP 25

    本文作者 Pranav Dar 是 Analytics Vidhya 的编辑,对数据科学和机器学习有较深入的研究和简介,致力于为使用机器学习和人工智能推动人类进步找到新途径.2018 这一年中,作者在 ...

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

    2019独角兽企业重金招聘Python工程师标准>>> 总感觉Android中关于分包的文章很少,或者几乎可以说没有.但是合理地分包,又可以使整个项目模块化,减少包与包之间的依赖,让 ...

  8. Ubuntu环境使用conda安装轻量级中文ocr开源项目chineseocr_lite,最简单的方式

    问题 接使用docker的方式来创建项目所报的错误 选中文件之后,界面不停的绕圈,显示不了对于图片的识别结果,并且监控界面上出现错误提示如下 ImportError: libpython3.6m.so ...

  9. Pull Request的正确打开方式(如何在GitHub上贡献开源项目)

    GitHub的官方帮助如下: Fork A Repo: https://help.github.com/articles/fork-a-repo Using Pull Requests: https: ...

  10. 开启你的开源项目生涯_了解如何在5分钟内以开源方式开始您的职业生涯

    开启你的开源项目生涯 Eric D.Schabell在10月23日于北卡罗来纳州罗利举行的All Things Open 2018的闪电演讲中, 题为``如何在开源中启动事业'', Eric D.在学 ...

最新文章

  1. Python中如何拷贝一个对象?(赋值、深拷贝、浅拷贝的区别)
  2. 【计算机网络】传输层 : TCP 协议 ( TCP 协议特点 | TCP 报文段首部格式 | TCP 报文段控制位 )
  3. 计算机组成原理:储存系统和结构
  4. Re:关于集成测试与系统测试
  5. POJ_2593最大两不想交子段和问题
  6. 使用 kube-bench 和 kube-hunter 对 Kubernetes 集群风险评估
  7. node中间件KOA函数
  8. ColorStateList 使用详解
  9. java ftp遍历所有子文件_Java 遍历指定文件夹及子文件夹下的文件
  10. ffmpeg拉流设置暂停_ffmpeg+SDL2实现的视频播放器「退出、暂停、播放」
  11. ajax验证作用,通过正则表达式使用ajax检验注册信息功能
  12. php添加pdo_mysql_php下添加pdo_mysql扩展
  13. 南京大学2021计算机考研复试线是多少,快讯!南京大学2021年考研复试线公布,金融专硕425分!...
  14. 博弈论——拍卖会(Auctions)
  15. 百度竞价软件测试面试,【百度SEM基础试题】百度推广竞价专员基础知识测试
  16. 在纯Win10环境下部署DzzOffice+OnlyOffice协同办公系统
  17. SEO文章优化,内容SEO优化,SEO文章内容优化
  18. CSS精华敏感肌护肤品,修复成分大揭秘|敏感肌屏障修复
  19. TMS320F280049C 学习笔记10 控制率加速器 Control Law Accelerator (CLA) 入门
  20. 树选择排序(Tree Selection Sorting)介绍

热门文章

  1. opengl画三维点_[500行代码学懂OpenGL]之一画点
  2. error: 'Can't connect to local MySQL server through socket '/data/3307/data/mysql.sock' (2)'
  3. 查看JVM运行时参数
  4. Idea Debug多线程不进断点问题处理
  5. 打开Lampix推出的台灯,即可在任何平面实现AR交互
  6. activity启动模式之standard
  7. java.text.ParseException: Unparseable date:
  8. 程序员——知识 [转载]
  9. vue限制点击次数_如何处理vue按钮多次点击重复提交数据
  10. python安装成功之后教程_python安装教程 Pycharm安装详细教程