zoukankan      html  css  js  c++  java
  • 由一个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剥夺了我们向往更深层次学习的动力。

    0
  • 相关阅读:
    phpcms后台进入地址(包含No permission resources错误)
    phpmyadmin上传大sql文件办法
    ubuntu彻底卸载mysql
    Hdoj 2602.Bone Collector 题解
    一篇看懂词向量
    Hdoj 1905.Pseudoprime numbers 题解
    The Python Challenge 谜题全解(持续更新)
    Hdoj 2289.Cup 题解
    Hdoj 2899.Strange fuction 题解
    Hdoj 2199.Can you solve this equation? 题解
  • 原文地址:https://www.cnblogs.com/kmsfan/p/4207231.html
Copyright © 2011-2022 走看看