由一个DAOHelper类引发的思考
这是一篇发牢骚的文章,可以这么说吧。DAOHelper究竟有什么用呢?用我自己的话去理解,DAOHelper的存在正是敏捷开发的产物,即快速开发。
我们究竟能从项目中学到什么呢?有的人可能会说,从一个项目中,你可以学到很多东西,比如你可以学习Nhibinate,Entity Framework 等ORM框架,还可以学习到LINQ 2 SQL等技术,但是,一个DAOHelper就能毁掉你的梦想。我们不妨来看看下面的一些代码。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 | using System; using System.Collections.Generic; using System.Linq; using System.Text; using Microsoft.Practices.Unity; using Sable.Dao; using Blrs.Wcp.Models; using PetaPoco; namespace Blrs.Wcp.Services { /// <summary> /// 外部数据源管理对象管理接口的实现类 /// </summary> /// <remarks> /// <img src="ClassDiagram.png" /> /// </remarks> public class CmsDataSourceService : ICmsDataSourceService { ICmsComplexDatumService cmsComplexDatumService = new CmsComplexDatumService(); public Page Show() { return this .ShowDataSource( "" ); } public Page ShowDataSource( string TypeId) { CmsDataSourceQueryData cmsDataSourceQueryData = new CmsDataSourceQueryData(); cmsDataSourceQueryData.Page = new Page(); cmsDataSourceQueryData.TypeId = TypeId; return Query(cmsDataSourceQueryData); } public Page Query(CmsDataSourceQueryData cmsDataSourceQueryData) { Sql sql = new Sql( "select a.* from Cms_DataSource a" ); string where = " a.DateSoureTitle like @0 " ; if (cmsDataSourceQueryData.TypeId != "" && cmsDataSourceQueryData.TypeId != null ) { where += " and a.DateSoureMethod <>'2' " ; } sql.Where( where , new object [] { "%" + cmsDataSourceQueryData.DateSoureTitle + "%" }); sql.OrderBy( new object [] { "a.DateSoureTitle" }); DaoHelper.QueryByPage<CmsDataSource>(sql, cmsDataSourceQueryData.Page); return cmsDataSourceQueryData.Page; } public void Add(CmsDataSourceList cmsDataSource) { string names = DaoHelper.ExecuteScalar< string >( "select a.DateSoureTitle from Cms_DataSource a where a.DateSoureTitle = @0 " , new object [] { "" + cmsDataSource.CmsDataSource.DateSoureTitle + "" }); if (names != null ) { throw new Exception( "不允许数据源名称相同!" ); } cmsDataSource.CmsDataSource.ID = Guid.NewGuid().ToString(); DaoHelper.Insert(cmsDataSource.CmsDataSource); cmsComplexDatumService.AddOrUpdate(cmsDataSource); } public void Update(CmsDataSourceList cmsDataSource) { string names = DaoHelper.ExecuteScalar< string >( "select a.DateSoureTitle from Cms_DataSource a where a.DateSoureTitle = @0 and a.ID<> '" +cmsDataSource.CmsDataSource.ID+ "'" , new object [] { "" + cmsDataSource.CmsDataSource.DateSoureTitle + "" }); if (names != null ) { throw new Exception( "不允许数据源名称相同!" ); } DaoHelper.Update(cmsDataSource.CmsDataSource); cmsComplexDatumService.AddOrUpdate(cmsDataSource); } public void Del( string id) { List< string > ids = new List< string >(); ids.Add(id); this .Dels(ids); } public void Dels(List< string > ids) { foreach ( string id in ids) { DaoHelper.Delete<CmsComplexDatum>( new Sql( "delete from Cms_ComplexData where NID='" + id + "'" )); DaoHelper.Delete<CmsDataSource>(( object )id); } } public CmsDataSourceList Show( string id) { CmsDataSourceList list = new CmsDataSourceList(); CmsDataSource cmsDataSource = DaoHelper.SingleOrDefault<CmsDataSource>(( object )id); IEnumerable<CmsComplexDatum> cmsComplexDatums = DaoHelper.Query<CmsComplexDatum>( "select a.*,b.DateSoureTitle from Cms_ComplexData a,Cms_DataSource b where a.CID=@0 and a.NID=b.ID " , new string [] { id }); list.CmsDataSource = cmsDataSource; list.CmsComplexDatums = cmsComplexDatums.ToList<CmsComplexDatum>(); return list; } } } |
这些代码本质上,说白一点吧,给一个从来没写过程序的人,花上3,5天我相信,如果他悟性好的话,也可以参透其中的原理。什么原因呢?所有的难点都是用类似"DAOHelper"的方式封装好了。其实上面的代码是我从公司的项目当中随便截取的,其他的代码我就不截取了,大体上就是这种模式。于是问题可以被浓缩成这样:“快速开发的利弊”。
先来说说好处吧,公司做项目,就好比工厂生产产品给客户,为了把这个产品做好,需要经过很多道工序,而这些框架性的东西,其实就是一套产品规范,我们只有按照这个规范去做了,那么才能生产出合格的产品。所以对于公司来说,快速开发是利大于弊的。
对于个人来说,除了学习在学校里学到的知识以外,当我们走进了一家公司,肯定是要学习这个公司的框架,当我们进不同的公司的时候,学到的框架的内容也是不同的,但是有一点,我们都是必须去学习,去适应这些千变万化的框架的。但是当你做了很多项目以后,突然有一天,你想自己尝试去写一些东西的时候,发现自己居然什么都不会,因为你已经对这些框架有了依赖的感觉,你只能去在这些框架之下完成一些特定的功能的制作。就像刚才上面提到的DAOHelper一样,不需要你写什么LAMBDA,也不需要你去做其他多余的操作,一个DAOhelper就能搞定,但是现实当中如果没那么多的ORM框架,肯定有些东西是要靠自己完成的。所以对于个人的发展,我觉得快速开发对程序员来说是弊大于利的,至少它可以从某种精神层面上剥夺程序员的主动性。
一句话可以概括一下我的思想:DAOHelper是用来做事的,而我们真正要学的,是DAOHelper深层次的原理,不能“ 知其然而不知其所以然”,不能让DAOHelper剥夺了我们向往更深层次学习的动力。
__EOF__
作 者:ღKawaii
出 处:https://www.cnblogs.com/kmsfan/p/4207231.html
关于博主:一个普通的小码农,为了梦想奋斗
版权声明:署名 - 非商业性使用 - 禁止演绎,协议普通文本 | 协议法律文本。
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角【推荐】一下。您的鼓励是博主的最大动力!

出处:http://www.cnblogs.com/kmsfan
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
欢迎大家加入KMSFan之家,以及访问我的优酷空间!
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?