.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);
        }
    }
}
	
发表评论
请自觉遵守互联网相关的政策法规,严禁发布色情、暴力、反动的言论。
用户名: 验证码:点击我更换图片
最新评论 更多>>

推荐热点

  • 用C#制作屏幕捕获程序
  • 遍历ArrayList易犯错误
  • 使用C#编写LED样式时钟控件
  • C#对XML操作:一个处理XML文件的类(1)
  • 怎样用C#实现完整文档打印功能
  • DataList嵌套问题 如何删除内层子DataList的记录
  • 使用c#+(datagrid控件)编辑xml文件
  • C#生成CHM文件(应用篇)之代码库编辑器(5)【总结、程序、源代码】
  • .NET简谈自定义事务资源管理器
网站首页 - 友情链接 - 网站地图 - TAG标签 - RSS订阅 - 内容搜索 - 移动版 - 返回顶部
Copyright © 2008-2015 计算机技术学习交流网. 版权所有

豫ICP备11007008号-1