关于委托的介绍,有篇文章真的不错,从简单到复杂的演变
http://bbs.csdn.net/topics/310243288
单凡用到委托,其业务需求必定是有点复杂,希望通过设计模式将业务分离出来。一切的设计都是去区分业务共性和特性,把握住这一点,至少不会乱用模式了。
一般对于订单的处理都会出现以下代码:
public class Service1 { public static void SaveOrder(int type) { //order.AddOrder 添加订单 //order.AddCashLog if (type==1) { //hotel.addhotelInfo } else if (type==2) { //ticket.addticketInfo } { //... } } }
良好的编码习惯就是要消灭if else ,降低阅读复杂度。
然后会出现以下重构:
public class Service2 { public static void SaveHotelOrder() { //order.AddOrder 添加订单 //order.AddCashLog //hotel.addhotelInfo } public static void SaveTicketOrder() { //order.AddOrder 添加订单 //order.AddCashLog //ticket.addticketInfo } }
然后第三步优化就看你对service的定义了,我对service的定义是传递数据,只做数据对象vo的拆解和组装。业务由BIZ层承担。(当然这不是绝对的,任何架构在业务面前都得低头!)
所以service层虽然负责任务明确,但赋值代码会很多,为了能让方法变得更简洁,做了以下调整。
public class BaseService { public static void SaveOrder(Action action) { //order.AddOrder 添加订单 //order.AddCashLog action(); } } public class Service3 : BaseService { public static void SaveHotelOrder() { SaveOrder(hotel.addhotelInfo); } public static void SaveTicketOrder() { SaveOrder(hotel.addhotelInfo); } }
项目属于重构改造,由于生产项目无法分享,就写了伪代码,虽然简单,结合自身项目做个引导把。本意在于设计时考虑业务抽象,分离不同点进行特殊处理。