这是一篇发牢骚的文章,可以这么说吧。DAOHelper究竟有什么用呢?用我自己的话去理解,DAOHelper的存在正是敏捷开发的产物,即快速开发。

  我们究竟能从项目中学到什么呢?有的人可能会说,从一个项目中,你可以学到很多东西,比如你可以学习Nhibinate,Entity Framework 等ORM框架,还可以学习到LINQ 2 SQL等技术,但是,一个DAOHelper就能毁掉你的梦想。我们不妨来看看下面的一些代码。

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剥夺了我们向往更深层次学习的动力。

0

由一个DAOHelper类引发的思考的更多相关文章

  1. MVC系列——一个异常消息传递引发的思考

    前言:最近在某个项目里面遇到一个有点纠结的小问题,经过半天时间的思索和尝试,问题得到解决.在此记录一下解决的过程,以及解决问题的过程中对.net里面MVC异常处理的思考.都是些老生常谈的问题,不多说, ...

  2. Java中由常量类引发的思考

    我们都知道,定义一个常量类是十分简单的.首先差固件一个类,然后类中声明一些public修饰的静态常量.没错就这么简单: 写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了. 而LZ现在想的是 ...

  3. 由项目中一个hash2int函数引发的思考

    hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $m ...

  4. 一个python问题引发的思考

    问题: pyqt5下开发的时候,遇到了一个这样的问题.Traceback (most recent call last):File “test.py”, line 3, in from PyQt5.Q ...

  5. 一个小BUG引发的思考。(论开发与测试之间的那点事)

    标题不是“一个馒头引发的血案”. 言归正传:今天上午测试的时候,发现了一个BUG,如图: 一个用肉眼就能发现的BUG.原因当然是因为开发同事没有自测试,流入到了测试人员这里了. 无非是开发同事不严谨造 ...

  6. 一个校验接口引发的思考--我真的了解Response吗

    一个校验接口 最近,我需要对接一个外部接口,基本功能是:校验指定的门店是否完善了货运信息.接口大致是这样的: POST https://******/Dealer/CheckCarrier Heads ...

  7. IK分词器实现原理剖析 —— 一个小问题引发的思考

    前言: 网上很多的文章都建议在使用IK分词器的时候,建立索引的时候使用ik_max_word模式:搜索的时候使用ik_smart模式.理由是max_word模式分词的结果会包含smart分词的结果,这 ...

  8. 一个JAVA题引发的思考

    转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...

  9. Spring之LoadTimeWeaver——一个需求引发的思考---转

    原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...

随机推荐

  1. DoTween 教程

    官方网站:http://dotween.demigiant.com/ 下载地址:http://dotween.demigiant.com/download.php pro版下载地址:http://pa ...

  2. FreeMarker中文API手册(完整)

    FreeMarker概述 FreeMarker是一个模板引擎,一个基于模板生成文本输出的通用工具,使用纯Java编写 FreeMarker被设计用来生成HTML Web页面,特别是基于MVC模式的应用 ...

  3. 平凡的KTV后台,不平凡的KTV数据

    之前就是说过“一个项目有很多重要的步骤以及功能”,那我们现在就来看看对于KTV项目来说:后台是处于什么样的重要作用! 首先就得了解KTV后台的一些功能了: 1.歌曲管理 .歌手管理 .设置资源路径 2 ...

  4. Hibernate多对多双向关联的配置

    Hibernate的双向多对多关联有两种配置方法:那我们就来看看两种方案是如何配置的.  一.创建以各自类为类型的集合来关联 1.首先我们要在两个实体类(雇员<Emploee>.工程< ...

  5. review简历之感想和建议

    最近帮很多朋友review他们的简历,总结起来存在以下问题: 1,简历太多页了.请尽量不超过两页.一般地,每个hr阅读简历的时间大概在20s甚至更少,写那么多页不仅毫无必要,而且有害. 而且我怀疑一般 ...

  6. python文件读取

    1.如何将一个“lessons.txt”文档一行行输出? myfile = file(‘lessons.txt’) for f in myfile.readlines(): print f myfil ...

  7. ABP理论学习之SignalR集成

    返回总目录 本篇目录 介绍 安装 建立连接 内置功能 你自己的SignaR代码 介绍 Abp.Web.SignalR 使得在基于ABP的应用程序中使用 SignalR相当容易.查看SignalR文档获 ...

  8. 细嗅Promise

    读完这篇文章,预计会消耗你 40 分钟的时间. Ajax 出现的时候,刮来了一阵异步之风,现在 Nodejs 火爆,又一阵异步狂风刮了过来.需求是越来越苛刻,用户对性能的要求也是越来越高,随之而来的是 ...

  9. 谈谈D2

    很多参与了 D2 的人还不知道 D2 是个什么东西,印象中就是很多很多前端工程师汇聚在一起,交流技术.D2 是 D2前端技术论坛的简称,英文名 Designer & Developer Fro ...

  10. EasyPR--一个开源的中文车牌识别系统

    我正在做一个开源的中文车牌识别系统,Git地址为:https://github.com/liuruoze/EasyPR. 我给它取的名字为EasyPR,也就是Easy to do Plate Reco ...