码迷,mamicode.com
首页 > 其他好文 > 详细

进步的途径

时间:2014-09-06 02:13:42      阅读:283      评论:0      收藏:0      [点我收藏+]

标签:style   blog   http   color   os   io   ar   for   2014   

bubuko.com,布布扣
/// <summary>
/// 获取列表(任意entity,尽量少的字段)
/// </summary>
/// <typeparam name="T"></typeparam>
/// <param name="sql"></param>
/// <returns></returns>
public static List<T> FindListBySql<T>(string sql, string dbname) where T : new()
{
    List<T> list = new List<T>();
    object obj;
    IDataReader rd = null;
    try
    {
        rd = RunReader(sql, dbname);

        if (typeof(T) == typeof(int))
        {
            while (rd.Read())
            {
                list.Add((T)rd[0]);
            }
        }
        else if (typeof(T) == typeof(string))
        {
            while (rd.Read())
            {
                list.Add((T)rd[0]);
            }
        }
        else
        {
            IList propertyList = ReflectionUtil.GetPropertyList(typeof(T));

            int fcnt = rd.FieldCount;
            List<string> fileds = new List<string>();
            for (int i = 0; i < fcnt; i++)
            {
                fileds.Add(rd.GetName(i).ToUpper());
            }

            while (rd.Read())
            {
                IDataRecord record = rd;
                obj = new T();


                foreach (PropertyInfo pro in propertyList)
                {
                    if (!fileds.Contains(pro.Name.ToUpper()) || record[pro.Name] == DBNull.Value)
                    {
                        continue;
                    }

                    if (rft.IsInterface(pro.PropertyType, typeof(IEntity)))
                    {
                        if (record[pro.Name].GetType() == typeof(int))
                        {
                            IEntity subOjb = ndb.findById(pro.PropertyType, (int)record[pro.Name]);

                            if (rft.IsInterface(obj.GetType(), typeof(IEntity)))
                            {
                                ((IEntity)obj).set(pro.Name, subOjb);
                            }
                            else
                            {
                                pro.SetValue(obj, Convert.ChangeType(subOjb, pro.PropertyType), null);
                            }
                        }
                    }
                    else
                    {
                        pro.SetValue(obj, record[pro.Name] == DBNull.Value ? null : getReaderValue(record[pro.Name], pro.PropertyType), null);
                    }
                }
                list.Add((T)obj);
            }
        }
    }
    catch (Exception ex)
    {
        logger.Error("sql=>" + sql);
        logger.Error(ex.Message);
        logger.Error(ex.StackTrace);
        throw ex;
    }
    finally
    {
        if (rd != null && !rd.IsClosed)
        {
            rd.Close();
        }
    }
    return list;
}
View Code

    从上面这段代码说起。

    这段代码是我们项目经理写的,我看了一会,了解了其中的逻辑,但代码不能调试,了解的不是很透彻。

    看了这段代码之后,我感觉我和项目经理在技术的差距就在这里。我虽然也能看懂,研究过后,我也能写一个出来,但体现水平的地方不在这里。我们的项目用了第三方的MVC框架,这个函数有的地方没有直接用C#反射相关的类,而是用了框架中封装的类,这就说,项目经理不是完全自己写一个东西出来,而是在看懂了框架的基础上,写出的这段代码。而项目经理不可能有大量空闲时间研究框架,最多也就几个星期的时间。在较短的时间内看懂一个第三方框架,并能在它的基础上扩展出需要的东西,这才是体现水平的地方!也是我现在不具备的技术能力。

    我以前也写过一些相对有些技术含量的东西,但是,它们有一个特点,100%原创,即使原本有别人的东西,我也会把它重写,变成自己的。中国人有一个优点,特别擅长逆向工程,为什么我就没有这个优点呢!我想仅从技术上讲,公司需要这样的人,一个新项目,一个新框架,但框架并不完美,是有局限的,你能不能在其它员工开工前,短短的时间内,把框架读懂,把框架中缺少的东西,需要改进的东西或者需要根据项目实际需求修改的东西做出来呢?

    昨天,我又看了一会我2010年,刚毕业那会写的代码,代码写的真烂,真让人抓狂!不过我想做为一个刚毕业不久的员工来说,只要领导的设计没有偏差,项目也不会因为我那些烂代码而失败的。看到那些代码,我想项目经理是不是有些失职呢?对员工的代码审查还是很重要的,尤其是工作时间不长的员工。不过话又说回来,正是这些很烂、很疯狂、很无知的代码,才使得我现在写这类代码能够游刃有余,达到炉火纯青的地步。后来,我觉得我是不是步入了歧途,所以不再写那样的代码,变得中规中矩,不再冒险,我在这方面的水平也就止步于此了!

    为什么我还达不到项目经理的水平呢?除了自己的悟性之外,因为我还没有在框架方面折腾过,还没有像我以前写页面功能那样,写过很多烂代码。不搞出过几个烂框架出来,不做烂几个项目,水平怎么上来呢?

    回头再看上面那段代码,在更强的高手眼里,(用词忘了),其实我看懂了之后,也觉得没有什么。但如果没有这段代码,我想恐怕我是写不出来吧,或者根本就不知道写这个东西,或许意味着项目中要多写很多代码。(2014年9月6日0时5分)(2014年9月6日1时54分)

 

进步的途径

标签:style   blog   http   color   os   io   ar   for   2014   

原文地址:http://www.cnblogs.com/s0611163/p/3958884.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!