由一个DAOHelper类引发的思考
这是一篇发牢骚的文章,可以这么说吧。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剥夺了我们向往更深层次学习的动力。
由一个DAOHelper类引发的思考的更多相关文章
- MVC系列——一个异常消息传递引发的思考
前言:最近在某个项目里面遇到一个有点纠结的小问题,经过半天时间的思索和尝试,问题得到解决.在此记录一下解决的过程,以及解决问题的过程中对.net里面MVC异常处理的思考.都是些老生常谈的问题,不多说, ...
- Java中由常量类引发的思考
我们都知道,定义一个常量类是十分简单的.首先差固件一个类,然后类中声明一些public修饰的静态常量.没错就这么简单: 写好之后,在其他地方使用的时候,直接类名.属性名就可以使用了. 而LZ现在想的是 ...
- 由项目中一个hash2int函数引发的思考
hash2int /** * 计算一个字符串的md5折算成int返回 * @param type $str * @return type */ function hash2int($str) { $m ...
- 一个python问题引发的思考
问题: pyqt5下开发的时候,遇到了一个这样的问题.Traceback (most recent call last):File “test.py”, line 3, in from PyQt5.Q ...
- 一个小BUG引发的思考。(论开发与测试之间的那点事)
标题不是“一个馒头引发的血案”. 言归正传:今天上午测试的时候,发现了一个BUG,如图: 一个用肉眼就能发现的BUG.原因当然是因为开发同事没有自测试,流入到了测试人员这里了. 无非是开发同事不严谨造 ...
- 一个校验接口引发的思考--我真的了解Response吗
一个校验接口 最近,我需要对接一个外部接口,基本功能是:校验指定的门店是否完善了货运信息.接口大致是这样的: POST https://******/Dealer/CheckCarrier Heads ...
- IK分词器实现原理剖析 —— 一个小问题引发的思考
前言: 网上很多的文章都建议在使用IK分词器的时候,建立索引的时候使用ik_max_word模式:搜索的时候使用ik_smart模式.理由是max_word模式分词的结果会包含smart分词的结果,这 ...
- 一个JAVA题引发的思考
转载自:http://www.cnblogs.com/heshan664754022/archive/2013/03/24/2979495.html 十年半山 今天在论坛闲逛的时候发现了一个很有趣的题 ...
- Spring之LoadTimeWeaver——一个需求引发的思考---转
原文地址:http://www.myexception.cn/software-architecture-design/602651.html Spring之LoadTimeWeaver——一个需求引 ...
随机推荐
- SQL 表的完整性
建立:主外键,约束.(删除主表的时候,同时删除子表:更新主表的时候更新子表) 1.建表时定义主键 Create table 表名 ( Sno int identity(1,1), Sname nvar ...
- 工作总结_js
工作至今已经有7个月了,虽然有进步,但是总感觉还是什么都不知道.可能这其中很大一部分还是与自己有关系,遇到自己不知道,问了人,或者百度到了,但是自己没有用心记.平时要用的时候,打开上一个项目,复制粘贴 ...
- Google云平台对于2014世界杯半决赛的预测,德国阿根廷胜!
由于本人是个足球迷,前段日子Google利用自己云平台预测世界杯八进四的比赛并取得了75%的正确率的事情让我振动不小.虽然这些年一直听说大数据的预测和看趋势能力如何如何强大,但这次的感受更加震撼,因为 ...
- 微软“.Net社区虚拟大会”dotnetConf2015 第二天 无处不在的Xamarin
今天,微软召开了“.Net 社区虚拟大会”(dotnetConf),包括微软的 Scott Hanselman 和 Xamarin 的 Miguel De Icaza 在内的知名人士,都将在 Chan ...
- Servant:基于Web的IIS管理工具
Servant for IIS是个管理IIS的简单.自动化的Web管理工具.安装Servant的过程很简单,只要双击批处理文件Install Servant Service.bat,然后按照屏幕上的说 ...
- ABP理论学习之通知系统
返回总目录 本篇目录 介绍 订阅通知 发布通知 用户通知管理者 实时通知 通知存储 通知定义 介绍 通知(Notification)用于告知用户系统中的特定事件.ABP提供了基于实时通知基础设施的发布 ...
- Javascript基础回顾 之(二) 作用域
本来是要继续由浅入深表达式系列最后一篇的,但是最近团队突然就忙起来了,从来没有过的忙!不过喜欢表达式的朋友请放心,已经在写了:) 在工作当中发现大家对Javascript的一些基本原理普遍存在这里或者 ...
- 谈谈对Spring IOC的理解
学习过Spring框架的人一定都会听过Spring的IoC(控制反转) .DI(依赖注入)这两个概念,对于初学Spring的人来说,总觉得IoC .DI这两个概念是模糊不清的,是很难理解的,今天和大家 ...
- 防刷票机制研究和.NET HttpRequest Proxy
最近应朋友之约 测试他做的投票网站 防刷票机制能力如何,下面有一些心得和体会. 朋友网站用PHP写的,走的是HttpRequest,他一开始认为IP认证应该就差不多了.但说实话这种很low,手动更换代 ...
- C#设计模式之外观
IronMan之外观 接着上篇观察者内容的“剧情”,没看过的朋友也没关系,篇幅之间有衔接的关系但是影响不大. 需求: 为"兵工厂"提供各种支持,生产了各式各样的"Iron ...