.NET应用架构设计—用户端的防腐层作用及设计(7)
来源:未知 责任编辑:责任编辑 发表时间:2015-05-17 16:44 点击:次
如果你觉得有必要可以将IOrderServiceClient、IProductServiceClient 两个接口放入AnticorrsiveBase<OrderViewModel>基类中。
5.1.转换逻辑过程化,直接写在防腐层的方法中
对于防腐层的设计,其实如果你的转换代码不多,业务也比较简单时,我建议直接写成过程式的代码比较简单点。将一些可以重用的代码直接使用静态的扩展方法来使用也是比较简单方便的,最大问题就是不利于后期的持续重构,我们无法预知未来的业务变化,但是我们可以使用重构来解决。
5.2.转换逻辑对象化,建立起封装、重用结构,防止进一步腐化
相对应的,可以将转换代码进行对象化,形成防腐对象,每一个对象专门用来处理某一个业务点的数据获取和转换逻辑,如果你有数据发送逻辑那么将在防腐对象中大大获益,对象化后就可以直接订阅相关控制器的依赖注入事件,如果你是过程式的代码想完成动态的转换、发送、获取会比较不方便。
6.防腐层的两种依赖倒置设计方法
我们接着看一下如何让防腐对象无干扰的进行自动化的服务调用和发送,我们希望防腐对象完全透明的在执行着防腐的职责,并不希望它会给我们实现上带来多大的开销。
6.1.事件驱动(防腐层监听显示逻辑事件)
我们可以使用事件来实现观察者模式,让防腐层对象监听某个事件,当事件触发时,自动的处理某个动作,而不是要显示的手动调用。
namespace OrderManager.Anticorrsive { public interface IOrderAnticorrsive { void SetController(OrderController orderController); OrderViewModel GetOrderViewModel(long oId); } }
Order防腐对象接口,里面包含了一个void SetController(OrderController orderController); 重要方法,该方法是用来让防腐对象自动注册事件用的。
public class OrderController : ApiController { private IOrderAnticorrsive orderAnticorrsive; public OrderController(IOrderAnticorrsive orderAnticorrsive) { this.orderAnticorrsive = orderAnticorrsive; this.orderAnticorrsive.SetController(this);//设置控制器到防腐对象中 } public event EventHandler<OrderViewModel> SubmitOrderEvent; [HttpGet] public void SubmitOrder(OrderViewModel order) { this.SubmitOrderEvent(this, order); } }
在控制器中,每当我们发生某个业务动作时只管触发事件即可,当然主要是以发送数据为主,查询可以直接调用对象的方法。因为防腐对象起到一个与后台服务集成的桥梁,当提交订单时可能需要同时调用很多个后台服务方法,用事件处理会比较方便。
相关新闻>>
- 发表评论
-
- 最新评论 更多>>