/// <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; }
从上面这段代码说起。
这段代码是我们项目经理写的,我看了一会,了解了其中的逻辑,但代码不能调试,了解的不是很透彻。
看了这段代码之后,我感觉我和项目经理在技术的差距就在这里。我虽然也能看懂,研究过后,我也能写一个出来,但体现水平的地方不在这里。我们的项目用了第三方的MVC框架,这个函数有的地方没有直接用C#反射相关的类,而是用了框架中封装的类,这就说,项目经理不是完全自己写一个东西出来,而是在看懂了框架的基础上,写出的这段代码。而项目经理不可能有大量空闲时间研究框架,最多也就几个星期的时间。在较短的时间内看懂一个第三方框架,并能在它的基础上扩展出需要的东西,这才是体现水平的地方!也是我现在不具备的技术能力。
我以前也写过一些相对有些技术含量的东西,但是,它们有一个特点,100%原创,即使原本有别人的东西,我也会把它重写,变成自己的。中国人有一个优点,特别擅长逆向工程,为什么我就没有这个优点呢!我想仅从技术上讲,公司需要这样的人,一个新项目,一个新框架,但框架并不完美,是有局限的,你能不能在其它员工开工前,短短的时间内,把框架读懂,把框架中缺少的东西,需要改进的东西或者需要根据项目实际需求修改的东西做出来呢?
昨天,我又看了一会我2010年,刚毕业那会写的代码,代码写的真烂,真让人抓狂!不过我想做为一个刚毕业不久的员工来说,只要领导的设计没有偏差,项目也不会因为我那些烂代码而失败的。看到那些代码,我想项目经理是不是有些失职呢?对员工的代码审查还是很重要的,尤其是工作时间不长的员工。不过话又说回来,正是这些很烂、很疯狂、很无知的代码,才使得我现在写这类代码能够游刃有余,达到炉火纯青的地步。后来,我觉得我是不是步入了歧途,所以不再写那样的代码,变得中规中矩,不再冒险,我在这方面的水平也就止步于此了!
为什么我还达不到项目经理的水平呢?除了自己的悟性之外,因为我还没有在框架方面折腾过,还没有像我以前写页面功能那样,写过很多烂代码。不搞出过几个烂框架出来,不做烂几个项目,水平怎么上来呢?
回头再看上面那段代码,在更强的高手眼里,(用词忘了),其实我看懂了之后,也觉得没有什么。但如果没有这段代码,我想恐怕我是写不出来吧,或者根本就不知道写这个东西,或许意味着项目中要多写很多代码。(2014年9月6日0时5分)(2014年9月6日1时54分)