首页 > 代码库 > 进步的途径

进步的途径

/// <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分)

 

进步的途径