好得很程序员自学网

<tfoot draggable='sEl'></tfoot>

让我们的领域逻辑彻底裸奔吧

让我们的领域逻辑彻底裸奔吧

让我们的领域逻辑彻底裸奔吧

菜阿斌以前写了两篇很好的文章:为什么要让我们的“领域模型”裸奔? (上) , (下) ,在我的  架构视角面面观 中也介绍了领域逻辑经常被Web 组件Api、分布组件Api、ORM组件API、ADO API 等污染,上面的几篇文章讲了领域裸奔的重要性、以及常见项目中的领域被污染的问题,关于如何解决该问题, 网上关于这方面的介绍倒很少。本篇将介绍如何让我们的领域逻辑不被Web组件、分布组件所污染,解决该问题的主角将是NLite.WebAPI 组件,下面就让它登场吧。

  NLite WebApi

  NLite web api 是基于 NLite.Web 和  Ndf 的服务分发器引擎,并借助Asp.net 的http原生态无状态协议的基础上搭建起来的 ,NLite Web api 完全无侵入性,不继承任何基类,只需要简单的配置即可把业务逻辑自动分发成NLite Web Api 服务。

    

    准备工作  新建一个空的ASP.NET Web Application项目

    

    2.   通过Nuget 下载NLite.Web 组件:install-package nui   (NUI 是NLite.Web 组件在Nuget库中的标志Id)

     3. 添加裸奔的领域逻辑:CalculateService(这里仅仅为了演示,没有把领域逻辑放到单独的项目中)

     public   class   CalculateService
    {
          public   int  Add( int  a,  int   b)
        {
              return  a +  b;
        }
          public   int  Sub( int  a,  int   b)
        {
              return  a -  b;
        }
          public   int  Multiply( int  a,  int   b)
        {
              return  a *  b;
        }
          public   int  Divide( int  a,  int   b)
        {
              return  a /  b;
        }
    } 

  配置NLite WebApi

  1. 添加Global文件(下面步骤的配置代码如果没有特殊说明的话都在Application_Start方法中放着),并导入下面的namespace

 using   NLite;
  using   NLite.Cfg;
  using   NLite.Domain.Cfg;
  using  NLite.Web;

  2. 创建NLite 配置对象

   var  cfg =  new  NLite.Cfg.Configuration();

       3. 配置NLite的DI 容器-Mini容器

  //  配置DI容器 
 cfg.Configure();

  4. 配置WebApi的Url 路由映射模版:api/{controller}/{action}/{id},那么CalculateService的Add方法对应的Url为:api/calculate/add

             //  配置WebAPI 路由服务 
            cfg.MapRequestRoute( new   ServiceRouteOption
            {
                Name  =  "  WebApi  "  ,
                Url  =  "  api/{controller}/{action}/{id}  "  ,
                Defaults  =  new  { id =  NLite.Web.UrlParameter.Optional }
            }); 

  5. 异常处理配置

             //  异常配置 
            cfg.Add( new  ExceptionConfigurationItem(container => 
            {
                container
                    .Register <NLite.Domain.ExceptionCode>() //  注册异常编码规则 
                    .Register<NLite.Web.Service.HttpJsonExceptionRender>() //  注册Json格式的异常呈现器 
                    .Register<LogExceptionReander>() //  注册日志格式的异常呈现器 
                    .Register<ServiceDispatcherExceptionResolver>() //  注册服务分发异常解析器 
                    .Register<DomainExceptionResolver>() //  注册领域(业务)异常解析器 
                    .Register<DbExceptionResolver>() //  注册Db异常解析器 
                    .Register<UnknowExceptionResolver>() //  注册未知异常解析器 
                    .Register<ExceptionHandler>(); //  注册异常处理器 
            }));

  6. 配置领域逻辑组件(比如Demo的 CalculateService )

            //  配置领域服务 
            cfg.Add( new  DomainComponentConfigurationItem(container => 
            {
                LifestyleType.Default  =  LifestyleFlags.Transient;
                container.Register <CalculateService> ();
            })); 

  F5 运行NLite WebApi 

  1. 在浏览器中输入:http://localhost:9620/api/ calculate / add ?a=2&b=3,那么NLite WeApi的调用流程:NLite.WebApi->NDF->CalculateService.Add(2,3)

     

   备注:   code 是服务器返回的状态码,code=1是成功,反之失败,data 的内容就是服务返回的真正结果

  2. 在浏览器中输入:http://localhost:9620/api/ calculate / multiply ?a=2&b=3,那么NLite WeApi的调用流程:NLite.WebApi->NDF->CalculateService.Multiply(2,3)

  总结

通过上面的例子看出,我们的领域逻辑组件 CalculateService ,非常干净,没有被任何Asp.net Web组件污染,也没有被任何分布框架的Api污染,仅仅需要简单的领域组件注册即可自动的发布成WebApi组件。

本篇的NLite WebApi 的配置和Demo例子都是手写的,其实这篇文章 : 给Web Api 再加把柴-让它更火起来  给大家一个更简单的方式来使用WebApi。为了更进一步了解WebApi 底层的Ndf服务分发器可以看看这篇文章: 松耦合服务调用利器-服务分发器 。

 

 

分类:  Ndf ,  NLite ,  服务分发器 ,  Mini DI容器

标签:  NLite ,  Ndf ,  WebApi

作者: Leo_wl

    

出处: http://www.cnblogs.com/Leo_wl/

    

本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。

版权信息

查看更多关于让我们的领域逻辑彻底裸奔吧的详细内容...

  阅读:36次