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
  • 相关阅读:
    安装composer后报错proc_open(): fork failed
    ZOJ4063 Tournament [The 2018 ACM-ICPC Asia Qingdao Regional Contest]
    BZOJ1191: [HNOI2006]超级英雄Hero
    BZOJ1270: [BeijingWc2008]雷涛的小猫
    BZOJ1303 [CQOI2009]中位数图
    BZOJ1192 [HNOI2006]鬼谷子的钱袋
    BZOJ1003 [ZJOI2006]物流运输 最短路+DP
    牛客国庆集训派对Day6 E-Growth
    BZOJ2208 [Jsoi2010]连通数
    BZOJ2761 [JLOI2011]不重复数字
  • 原文地址:https://www.cnblogs.com/kmsfan/p/4207231.html
Copyright © 2011-2022 走看看