• 面向服务架构~面向服务的API是统一接口还是具体业务使用具体的接口?


    前言说明:这里说的"接口"并不是C#时的interface,而一般指定一个方法签名,它一般为外部提供一个GET请求,接口到请求后,进行处理,然后对调用方进行信息的返回.

    回到本题中来,事件上,我们坐下来,认真去想想,还是统一接口的比较好,如果要具体业务使用具体接口,那它的具体接口肯定也是去再调用一下"那个统一的入口模块"的,注意,这里我说的是"模块",而不是"接口,类,方法等"

    大体流程应该是这样:

    客户端调用某个服务接口

    接口系统

    调用某体业务前的逻辑

        创建一个具体业务

    调用某体业务后的逻辑

    返回给客户端


    对于一个服务端的代码要求应该是这样:

    1 接口对外具有稳定性

    2 对自己具体很好的扩展性(开闭原则)

    3 每种具体业务都是独立的(单一职责原则)

    对于上述要求,我设计如下代码:

     1     /// <summary>
     2     /// 对外统一接口模块
     3     /// </summary>
     4     public class SOA : Controller
     5     {
     6         /// <summary>
     7         /// 统一接口方法,外面可以使用GET请求
     8         /// </summary>
     9         /// <param name="blockName"></param>
    10         /// <param name="param"></param>
    11         /// <returns></returns>
    12         public ContentResult UserAPI(string blockName, string param)
    13         {
    14             IAPI create = (IAPI)System.Reflection.Assembly.Load("dll").CreateInstance("namespace" + blockName);
    15             if (create.Create(param))
    16                 return Content("成功");
    17             else
    18                 return Content("失败");
    19         }
    20     }
    21 
    22     /// <summary>
    23     /// 建立API指定接口规范
    24     /// </summary>
    25     internal interface IAPI
    26     {
    27         bool Create(string param);
    28     }
    29 
    30     /// <summary>
    31     /// 添加购买动态的服务
    32     /// </summary>
    33     internal class AddBuyingNews : IAPI
    34     {
    35         public bool Create(string param)
    36         {
    37             return true;
    38         }
    39     }
    40 
    41     /// <summary>
    42     /// 添加用户等级的服务
    43     /// </summary>
    44     internal class AddUserLevel : IAPI
    45     {
    46         public bool Create(string param)
    47         {
    48             return true;
    49         }
    50     }

    通过上面代码,我们可以看到,对外统一UserAPI是稳定的,当业务有变化直接修改具体业务即可,客户端平台不用修改,而AddBuyingNews和AddUserLevel这两个类型是实现各自业务的,它们之间是独立的,功能是单一的,这符合单一职责,而如果服务层希望扩展新的业务只要建立一个新类型即可,对外统一接口UserAPI不用改变,因为具体业务已经通过反射实现了松耦合,有人说反射会对性能有很大的影响,事实上,不是这样的,细心的朋友可以看一下.net自己的托管的类库,用了大量的反射,为何要用反射?我会在另一篇文章中去说明,今天主要讲的就是这些,呵呵.

  • 相关阅读:
    清空收缩数据库日志文件的方法
    JavaScript中的剪贴板的使用(clipboardData)
    location.search在客户端获取Url参数的方法
    JS之onkeypress,onkeydown,onkeyup区别
    网页中的meta标签的作用
    SQL优化条
    JS简洁经典滚动上下与左右
    结构体
    static修饰符
    Solaris内存监控 & solaris查看内存使用情况
  • 原文地址:https://www.cnblogs.com/lori/p/2515547.html
Copyright © 2020-2023  润新知