阅读全文
阅读全文
本文教你如何成为一名不合格的程序员,已经成为或即将成为或具有该潜质的童鞋可以看看,复习一下,也请不吝赐教。其他的认为一辈子都无法达到这种境界的童鞋,可以以此文作为茶余饭后的笑料。![]()
1. 永远要两次跳进同一个坑里。
2. 让你的Leader重复他/她说过的话。
3. 每件事情只做好一半,但要跟Leader说:差不多了。
4. 永远不要对自己做过的事负责。
5. 要写出连自己都看不懂的代码,这样才显得自己与众不同。
6. 编码规范神马的都是浮云,哥的代码才是标准:变量名用abc,方法名大小写等都是即兴表演。
7. 不管什么问题绝对不要跟Leader说,以免他/她知道你的不足。
8. 你的编程知识已经可以应付一切项目了,啥学习或培训都不用啦,空余时间泡妞玩游戏已经够累啦。
9. 多犯一些低级错误,反正Leader也是闲着没事干,让他/她看看我的“杰作”刺激一下神经多好啊,不是吗?
10. 如果运气不好不小心参加了公司的开发培训,在课堂上左耳进右耳出就可以了,然后在开发过程中不断去提问吧。
11. 像神父传教一样多向周围的程序员宣传“技术无用论”。
12. 上班时间打打酱油,下班时间加加班,这是必须的!
13. 干完一项任务别告诉Leader,一旦让他/她知道就会分配其他任务来的。
14. 拿着一个锤子干活就足够了,其他神马的都是钉子而已。
15. 别去看人家的博客,甭管它有多优秀;买书籍?又不能当饭吃!等有问题,在论坛上发帖跪求就KO了。
16. 你不会写的代码都是因为Leader没有提供一个可以供你Copy的版本而已。
17. 提交一些不能编译的代码到代码服务器吧,很有趣的。
18. 注释是多余的。
19. 未来想做项目经理,所以不用学技术,开发前不用搞什么计划,开发后也不用总结。
20. 多信信什么什么哥之类的,他能让你原地复活,挂几次也不怕,就是不要常挂在一个公司上。![]()
大概两年前我写了篇《QueryBuilder : 打造优雅的Linq To SQL动态查询》,赢得不少厚爱,如今它还是我博客访问量最高的一篇(即使只有可怜的5500点击量,比一些大牛们少一位数)。时过境迁、岁月不饶人,当年得意之作现在看起来不值一文。收集一下朋友的反馈,主要有下列问题:
——现在——
QueryBuilder已经发生翻天覆地的变化,但对于使用者来说,使用接口还是一成不变的,并且完全兼容上一版本。当然,它依旧是开源&免费的!
var queryBuilder = QueryBuilder.Create<Orders>() .Like(c => c.Customers.ContactName, txtCustomer.Text) .Like(c => c.Customers.CompanyName, txtCustomer.Text) .Between(c => c.OrderDate, DateTime.Parse(txtDateFrom.Text), DateTime.Parse(txtDateTo.Text)) .Equals(c => c.EmployeeID, int.Parse(ddlEmployee.SelectedValue)) .In(c => c.ShipCountry, selectedCountries);
难点在于不同查询条件之间的参数作用域是相对独立的,如果直接使用 Expression.AndAlso来拼接是行不通的。
上一版本用Expression.Invoke解决,但Invoke在EF下不支持。
解决办法是改用 ExpressionVisitor,重写VisitParameter,返回新的参数表达式。
public class ParameterExpressionVisitor : ExpressionVisitor { private ParameterExpression newParameterExpression; public ParameterExpressionVisitor(ParameterExpression p) { newParameterExpression = p; } public Expression ChangeParameter(Expression exp) { return Visit(exp); } protected override Expression VisitParameter(ParameterExpression p) { return newParameterExpression; } }
也即是获取第一个Lambda表达式的参数,把后面的表达式用该参数替换。
private static Expression GetMemberExpression<T, P>(IQueryBuilder<T> q, Expression<Func<T, P>> property) { if (q.Parameters == null || q.Parameters.Length == 0) { q.Parameters = property.GetParameters(); return property.Body; } ParameterExpressionVisitor visitor =new ParameterExpressionVisitor(q.Parameters[0]); Expression memberExpr = visitor.ChangeParameter(property.Body); return memberExpr; }
旧版本的In操作不支持EF,改成通过反射获取泛型方法。
……
Expression<Func<P[], P, bool>> InExpression = (list, el) => list.Contains(el);
var methodExp = InExpression;
var invoke = Expression.Invoke(methodExp, constant, property.Body);
Expression<Func<T, bool>> lambda = Expression.Lambda<Func<T, bool>>(invoke, parameter);
……
其中有重载的泛型方法的获取比较麻烦,大家可以观摩一下代码,看看有无好建议。
//var method = typeof(Enumerable).GetMethod("Contains"); //因为有重载,这样获取不到 private static MethodInfo method_Contains = (from m in typeof(Enumerable).GetMethods() where m.Name.Equals("Contains") && m.IsGenericMethod && m.GetGenericArguments().Length == 1 && m.GetParameters().Length == 2 select m ).First();
旧版本的Like操作使用SqlMethods.Like,也不支持EF。新版本改成字符串的Contains。
typeof(string).GetMethod("Contains", new Type[] { typeof(string) })
旧版本的Between不支持字符串,例如 Between(c=>c.xx, ”A” , ”Z”) 则解析会报错。新版本增加新的扩展方法单独处理字符串的情况。
Between<T>(this IQueryBuilder<T> q, Expression<Func<T, string>> property, string from, string to)
很难得两年写的东东在今时今日还能保持原有接口不变并成功重构啊,已经激动到内牛满面&裸奔ing…
源代码下载 CoolCode.Linq.V2.rar
http://www.cnblogs.com/coolcode/archive/2009/09/28/IQueryBuilder.html

小霸王(闺女的别称),出生10天。
为小霸王换纸尿片。
换纸尿片,擦干净屁股,不能着凉,舒服。
小霸王不哭,屁股要干净。
在前几个项目,我都是担任助理工程师,如在换尿片项目中端水、拿垃圾桶等细活。但由于参与整个项目过程,慢慢领会项目各阶段的奥秘,立马晋升成项目经理,现已成功实施3个项目经验,也是客户满意度最高的几个。
小霸王怕冻;不懂技术语言,只会发3个音——咿呀哇。无法把握客户需求有一部分原因是,当她哇哇叫时,是要换尿片呢还是要喝奶呢。因为对于客户看来,换尿片和喝奶都是同一样东西,因此她表达都一样,需要不断细化才能准确把握真正的需求点。
预估项目风险有利于降低项目风险。换尿片的风险其一是小霸王容易着凉,会导致整个项目失败,是最高风险;其二是换纸尿片时,小霸王的黄金可能会漏出来,导致项目成本增加——拖地。
小霸王叫了,确认换尿片角色——我担任项目经理,兼项目实施;小霸王妈妈担任高级换尿片工程师。
换纸尿片项目是客户面前最关注的一个项目,成功实施会向全省BB推广。
工作量:2人8分钟;资源:2人、取暖器、爽身粉、盆子、暖水、垃圾桶、纸尿片、毛巾、手帕(擦屁股用)。专家评估法:关羽阿妈评估5分钟、刘备阿妈评估9分钟、张飞阿妈评估10分钟,最后汇总得出结果是8分钟。
小霸王怕冷,要关好窗户,开取暖器以防着凉。擦屁股在保证擦干净的前提下,力度得适中,擦的舒服。
准备取暖器、爽身粉、暖水、垃圾桶、纸尿片,关好窗户,并精通尿片使用指南。
关窗,取暖器温度适中,暖水接近体温。脱小霸王的裤子、原纸尿片放入垃圾桶,用暖水擦屁股,用毛巾擦干,刷爽身粉,换上新的纸尿片,穿裤子,关暖气、开窗,清理现场。
按设计流程和要求实施,并增加环节:在整个换尿片过程,用各种办法分散小霸王的注意力。如果实施过程不合客户的要求,她会发飙,哇哇乱叫——老爸!你手脚还不快点,想要我的小命是不?!
小霸王妈妈抽掉旧尿片后,反馈并说明可以进行擦屁股流程。
小霸王愉快地睡觉。
这个换尿片项目等到客户的一致好评,准确把握客户需求,成功控制取暖器的温度和擦屁股的力度。
降低成本,如在保证小霸王舒适度的前提下减少纸尿片的支出;提高效率:减少换尿片的时间。
提高团队协作能力,换纸尿片各环节的配合;提高工作效率,快速地帮小霸王宽衣穿衣。
项目成员总结项目经验并且文档化,启动新成员。如本文。
出书《高效换尿片的45个习惯》、《走出换尿片的作坊》,开发换尿片机器人等。
暂无小孩的朋友等将来有小孩后再来看这篇文章会更有意思。
今日换纸尿片突发奇想,激发项目管理的灵感,兴高采烈,赶紧磨墨写文,存此流芳百世。