面向服务架构~面向服务的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自己的托管的类库,用了大量的反射,为何要用反射?我会在另一篇文章中去说明,今天主要讲的就是这些,呵呵.
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· Java 中堆内存和栈内存上的数据分布和特点
· 开发中对象命名的一点思考
· .NET Core内存结构体系(Windows环境)底层原理浅谈
· C# 深度学习:对抗生成网络(GAN)训练头像生成模型
· .NET 适配 HarmonyOS 进展
· 本地部署 DeepSeek:小白也能轻松搞定!
· 如何给本地部署的DeepSeek投喂数据,让他更懂你
· 从 Windows Forms 到微服务的经验教训
· 李飞飞的50美金比肩DeepSeek把CEO忽悠瘸了,倒霉的却是程序员
· 超详细,DeepSeek 接入PyCharm实现AI编程!(支持本地部署DeepSeek及官方Dee
2011-05-23 大家一起来学习一下面向对象的三层架构吧!今天我来说说Entity有时也叫MODEL实体层!
2011-05-23 通过枚举返回指定字符结果[有时,好的程序就是一种规范,一种对事物的理解和认识,一种层次]
2011-05-23 通过一个抢购的需要,而引发的购物车问题(这个抢购是一个与主站不同的域名)