DotNET企业架构应用实践-基于接口开发介绍以及应用场景和案例

简介: 基于接口开发介绍          基于接口编程的本质是分离对象的实现与使用者之间的关系,即变更以下对象结构的依赖变化:                这样说的好处是客户对象依赖于服务接口,即在开发过程中我们只关注于服务接口的定义,而不关注于服务对象的具体实现,客户对象只有在运行期才通过解耦与后期绑定辅助工具(类)与具体的服务实现对象动态的建议依赖。

基于接口开发介绍

         基于接口编程的本质是分离对象的实现与使用者之间的关系,即变更以下对象结构的依赖变化:

image

 

 

 

         这样说的好处是客户对象依赖于服务接口,即在开发过程中我们只关注于服务接口的定义,而不关注于服务对象的具体实现,客户对象只有在运行期才通过解耦与后期绑定辅助工具(类)与具体的服务实现对象动态的建议依赖。

         这样做的好处是很显然的,从技术上讲,如果把服务接口与服务实现分别放在不同的组件之中,那么修改了服务实现组件,我们不用重新编译客户组件,在软件工程上的带给我们的好处是,服务接口与服务组件即接口定义与实现可以相分离,可以交给不同的人去做,同时,我们可以通过这种结构实现在运行期通过动态配置以替换不同的服务组件实现。

一个应用场景及案例

         比如我们要开发一套HIS系统,需要集成医疗保险,但是不同的地区使用不同的医疗保险系统,我们的HIS必须要达到在与不配的医疗保险系统相配合,但我们不能因为应用了不同的医疗服务而变更HIS中的相关逻辑,那么我们应该怎么办呢?

         答案是采用基于接口驱动的思想,我们定义一个HIS医疗保险接口组件(HIS.Medicare.Interface),HIS系统中使用医疗保险业务的地方切调用这个接口的方法或者服务,而我们在不同的城市实施HIS的过程中,开发出各城市的医疗保险实现组件,比如HIS.Medicare.Lanzhou、HIS.Medicare.BaoTou,我们也可以弄一个空的实现HIS.Medicare.Default,即不使用医疗保险的情况,那么整个结构就如下所示:

image

 

 

         HIS系统中的HIS.Medicare.Interface消费者对一切保险业务的处理都是调用HIS.Medicare.Interface包中的业务定义组件,不关心系统运行时倒低采用那一个实现,或者没有实现或者只有一个默认的实现HIS.Mecicare.Default,或许真实运行环境的这具体实现还没有开发,实能在项目中需要才去开发,那么消费者与接口的实现是如何建立联系的呢?

实现的后期绑定

         消费者与具体的实现如何建设关系呢,方法有很多种,最常见的莫过于使用抽像工厂模式,也可以使用IOC容器进行解耦,具体如何说呢,我下面示例说明。

        比如我们在HIS.Medicare.Interface定义了一个接口IMedicareProvider

 

1       public   interface  IMedicareProvider
2      {
3          IMedicareDrugSelect CreateMedicareDrugSelect();
4 
5          IMedicareItemInfoSelect CreateMedicareItemInfoSelect();
6 
7          IMedicareServiceSelect CreateMedicareServiceSelect();
8      }

 

 

       而我们在HIS.Medicare.Lanzhou、HIS.Medicare.BaoTou和HIS.Medicare.Default中都实现了这个类,那么我们刚可以在HIS.Medicare.Interface组件中增加如下代码:

 
 
 1       public   static   class  MedicareProviderHelper
 2      {
 3           static   readonly   string  ConfigKey  =   " HIS.MedicareProvider " ;
 4           public   static  IMedicareProvider MedicareProvider
 5          {
 6               get
 7              {
 8                   return  ContextHelper.GetContext().Container.GetComponentInstance(ConfigKey)  as  IMedicareProvider;
 9              }
10          }
11      }

 

    并且需要在系统配置文件的IOC配置信息中增加如下内容:
1  < object  name ="HIS.MedicareProvider"  assembly ="HIS.Medicare.Default"  type ="HIS.Medicare.Default.MedicareProvider"  LifestyleType ="Thread"   />

 

       上面我处理我使用了AgileEAS.NET平台中的IOC组件,有关IOC的介绍请参考AgileEAS.NET平台之对象控制反转一文。这样处理以后,我们在任何使用IMedicareProvider 接口的地方直接采用MedicareProviderHelper.IMedicareProvider 的方式消费IMedicareProvider 对象。

结束语

         事实说明,基于接口开发在某些应用场景能很好的分离服务对象与消费者对象之间的依赖,在软件开发过程中不失为一种非常有效的手段,如果运用的合理,将起到事半功陪的效果,但是,基于接口开发也不是万能的,并不解决问题的唯一银弹,就比如我们传统的文件,架构或者模式的设计一切基于应用为先的原则,即怎么样的业务即采用怎么样的架构技术,不如一味的强求与照搬。合理就好。

         文未我加点广告,谢谢!

链接

一步一步教你使用AgileEAS.NET基础类库进行应用开发-系列目录

AgileEAS.NET平台开发指南-系列目录

AgileEAS.NET应用开发平台介绍-文章索引

AgileEAS.NET平台应用开发教程-案例计划

AgileEAS.NET官方网站

敏捷软件工程实验室

QQ群:116773358(AgileEAS.NET平台),9105332(系统架构交流群)

目录
相关文章
|
2月前
|
新零售 供应链 数据挖掘
推三返一系统开发|成熟案例|源码部署
“新零售”的商业生态构建将涵盖网上页面
|
3月前
|
Dubbo 前端开发 Java
让你在组建企业级项目时手到擒来——浅谈各类常用工具和框架概述
让你在组建企业级项目时手到擒来——浅谈各类常用工具和框架概述
|
测试技术 数据库 安全
带你读《C++代码整洁之道:C++17 可持续软件开发模式实践》之二:构建安全体系
如果想用C++语言编写出易维护的、扩展性良好的以及生命力强的软件,那么,对于所有的软件开发人员、软件设计人员、对现代C++代码感兴趣或想降低开发成本的项目领导者来说,本书都是必需品。如果你想自学编写整洁的C++代码,那么本书也是你需要的。本书旨在通过一些示例帮助各个技术层次的开发人员编写出易懂的、灵活的、可维护的和高效的C++代码。即使你是一名资深的开发工程师,在本书中也可以找到有价值的知识点。
|
4月前
|
消息中间件 NoSQL 中间件
【Go电商实战05】结合商业项目讲解中间件的概念和应用
把Go语言中的知识点结合商业项目,理论联系实践,更好的学习理解,高效学,少踩坑。
|
8月前
|
NoSQL Java 测试技术
破防了!阿里用17个真实企业级项目阐述Java系统分析与架构设计
最近,有小伙伴问我,有没有能够在短时间内快速增长软件项目的系统分析与架构设计能力的方法。 想了很久还是决定把这份用17个真实企业级项目阐述的《Java系统分析与架构设计》手册分享出来。 这份手册按照一个完整的软件项目周期: 立项→业务需求→软件需求分析→架构设计→模块设计→代码开发→软件测试→项目部署→系统维护 深入浅出地讲解了需求分析技术、软件开发架构设计、关系型物理表设计、Redis应用实战、MongoDB 开发与应用、Web服务器与数据库的集群部署等内容。
108 0
|
11月前
|
存储 架构师 安全
【企业架构框架】如何使用新的 TOGAF 版本 10
【企业架构框架】如何使用新的 TOGAF 版本 10
|
11月前
「企业架构」Zachman框架简介
「企业架构」Zachman框架简介
|
XML JSON 前端开发
Apifox --- 全套服务提升了团队效率,让研测之间充满了爱(记Apifox在工程中的实际应用)【云原生】
大家好,我是码农飞哥—作为一名后端老码农,我做的大部分项目一般都是基于 Swagger 来管理 API 文档,基于 Postman 来做接口调试,基于 JMeter 来做接口性能测试,基于RAP 等工具 Mock API 数据。
220 0
Apifox --- 全套服务提升了团队效率,让研测之间充满了爱(记Apifox在工程中的实际应用)【云原生】
|
存储 SQL 人工智能
谈谈企业如何构建现代数据平台
数据平台是一组集成的技术,它们共同满足组织的端到端数据需求。
谈谈企业如何构建现代数据平台
|
前端开发 架构师 Serverless
人人都是Serverless架构师之传统内容管理系统改造实战一[开篇]
内容管理系统是很常见的一种web应用场景,可以用到个人独立站,企业官网展示等场景,具有很高的实用价值,一个标准的内容管理系统主要由三个部分组成 主站展示部分、后台管理系统、API接口服务,本系列文章会以一个已有内容管理系统的Serverless架构重构展开,介绍改造的基本思路,改造细节,以及性能优化业务可观测设计等。涉及大家关心的Serverless生产遇到的一些问题,比如数据库、日志、动静态分离、调试、维护、灰度方案等。最真实的展现Serverless架构的实施落地细节。 本篇章作为系列文章的开篇,大致讲解一下将传统前端应用重构成Serverless架构的架构设计方案,工程改造思路,以及部署
248 0
人人都是Serverless架构师之传统内容管理系统改造实战一[开篇]

热门文章

最新文章