.NET应用架构设计—用户端的防腐层作用及设计(3)
来源:未知 责任编辑:责任编辑 发表时间:2015-05-17 16:44 点击:次
将用户层分层三个子层,UiLayer,Show Logic Layer,Anticorrosive Layer,最后一个是服务的接口组,所有的服务接口调用均需要从防腐层走。
我们需要将Show Logic Layer中的服务调用,类型转换代码迁移到Anticorrsoive Layer中,在这里可以对象化转换逻辑也可以不对象化,具体可以看下项目是否需要。如果业务确实比较复杂的时候,那么我们为了封装、重用就需要进行对象化。
4.剥离服务调用的技术组件让其依赖接口
首先要做的就是将逻辑代码中的服务对象重构成面向接口的,然后让其动态的依赖注入到逻辑类型中。在ASP.NETWEBAPI中,我们基本上将显示逻辑都写在这里面,我也将使用此方式来演示本章例子,但是如果你的MVC项目和WEBAPI项目共用显示逻辑就需要将其提出来形成独立的项目(Show Logic Layer)。
using OrderManager.Port.Models; using System.Collections.Generic; using System.Web.Http; namespace OrderManager.Port.Controllers { public class OrderController : ApiController { [HttpGet] public OrderViewModel GetOrderById(long oId) { OrderService.Contract.OrderServiceClient client = new OrderService.Contract.OrderServiceClient(); var order = client.GetOrderByOid(oId); if (order == null) return null; return AutoMapper.Mapper.DynamicMap<OrderViewModel>(order); } } }
这是一段很简单的调用Order服务的代码,首先需要实例化一个服务契约中包含的客户端代理,然后通过代理调用远程服务方法GetOrderByOid(long oId)。执行一个简单的判断,最后输出OrderViewModel。
如果所有的逻辑都这么简单我想就不需要什么防腐层了,像这种类型的显示代码是极其简单的,我这里的目的不是为了显示多么的复杂的代码如何写,而是将服务调用调用的代码重构层接口,然后注入进OrderController实例中。目的就是为了能够在后续的迭代重构中对该控制器进行单元测试,这可能有点麻烦,但是为了长久的利益还是需要的。
using OrderManager.Port.Component; using OrderManager.Port.Models; using System.Collections.Generic; using System.Web.Http; namespace OrderManager.Port.Controllers { public class OrderController : ApiController { private readonly IOrderServiceClient orderServiceClient; public OrderController(IOrderServiceClient orderServiceClient) { this.orderServiceClient = orderServiceClient; } [HttpGet] public OrderViewModel GetOrderById(long oId) { var order = orderServiceClient.GetOrderByOid(oId); if (order == null) return null; return AutoMapper.Mapper.DynamicMap<OrderViewModel>(order); } } }
相关新闻>>
- 发表评论
-
- 最新评论 更多>>