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(系统架构交流群)


作者:魏琼东 
出处:http://www.cnblogs.com/eastjade
关于作者:有13年的软件从业经历,专注于中小软件企业软件开发过程研究,通过在技术与管理帮助中小软件企业实现技术层面开源节流的目的。熟悉需求分析、企业架构、项目管理。现主要从事基于AgileEAS.NET平台的技术咨询工作,主要服务于医疗卫生、铁路、电信、物流、物联网、制造、零售等行业。如有问题或建议,请多多赐教! 
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过mail.james@qq.com 联系我,也可以加入QQ群:113723486、199463175、116773358、116773358、212867943、147168308、59827496、193486983、15118502和大家共同讨论,非常感谢。



相关文章
|
1天前
|
JSON API 数据库
后端架构设计与优化:打造高性能应用后端
后端架构设计与优化:打造高性能应用后端
10 2
|
1天前
|
消息中间件 持续交付 数据库
构建高效可靠的微服务架构:策略与实践
【4月更文挑战第25天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。本文深入探讨了如何构建一个高效且可靠的微服务架构,包括关键的设计原则、技术选型以及实践中的挑战和应对策略。通过分析多个成功案例,我们总结了一系列最佳实践,并提出了一套可量化的性能优化方法。文章不仅为开发者提供了具体的技术指导,同时也强调了团队协作和持续学习在微服务转型过程中的重要性。
|
9天前
|
消息中间件 运维 监控
现代化软件开发中的微服务架构设计与实践
本文将深入探讨现代化软件开发中微服务架构的设计原则和实践经验。通过分析微服务架构的优势、挑战以及常见的设计模式,结合实际案例,帮助开发者更好地理解如何构建可靠、可扩展、高效的微服务系统。
|
9天前
|
负载均衡 Java 开发者
细解微服务架构实践:如何使用Spring Cloud进行Java微服务治理
【4月更文挑战第17天】Spring Cloud是Java微服务治理的首选框架,整合了Eureka(服务发现)、Ribbon(客户端负载均衡)、Hystrix(熔断器)、Zuul(API网关)和Config Server(配置中心)。通过Eureka实现服务注册与发现,Ribbon提供负载均衡,Hystrix实现熔断保护,Zuul作为API网关,Config Server集中管理配置。理解并运用Spring Cloud进行微服务治理是现代Java开发者的关键技能。
|
10天前
|
敏捷开发 监控 前端开发
深入理解自动化测试框架Selenium的架构与实践
【4月更文挑战第16天】 在现代软件开发过程中,自动化测试已成为确保产品质量和加快迭代速度的关键手段。Selenium作为一种广泛使用的自动化测试工具,其开源、跨平台的特性使得它成为业界的首选之一。本文旨在剖析Selenium的核心架构,并结合实际案例探讨其在复杂Web应用测试中的高效实践方法。通过详细解读Selenium组件间的交互机制以及如何优化测试脚本,我们希望为读者提供深入理解Selenium并有效运用于日常测试工作的参考。
15 1
|
10天前
|
人工智能 Serverless 数据处理
利用阿里云函数计算实现 Serverless 架构的应用
阿里云函数计算是事件驱动的Serverless服务,免服务器管理,自动扩展资源。它降低了基础设施成本,提高了开发效率,支持Web应用、数据处理、AI和定时任务等多种场景。通过实例展示了如何用Python实现图片压缩应用,通过OSS触发函数自动执行。阿里云函数计算在云计算时代助力企业实现快速迭代和高效运营。
46 0
|
6天前
|
敏捷开发 监控 数据管理
构建高效微服务架构的五大关键策略
【4月更文挑战第20天】在当今软件开发领域,微服务架构已经成为一种流行的设计模式,它允许开发团队以灵活、可扩展的方式构建应用程序。本文将探讨构建高效微服务架构的五大关键策略,包括服务划分、通信机制、数据管理、安全性考虑以及监控与日志。这些策略对于确保系统的可靠性、可维护性和性能至关重要。
|
18天前
|
API 数据库 开发者
构建高效可靠的微服务架构:后端开发的新范式
【4月更文挑战第8天】 随着现代软件开发的复杂性日益增加,传统的单体应用架构面临着可扩展性、维护性和敏捷性的挑战。为了解决这些问题,微服务架构应运而生,并迅速成为后端开发领域的一股清流。本文将深入探讨微服务架构的设计原则、实施策略及其带来的优势与挑战,为后端开发者提供一种全新视角,以实现更加灵活、高效和稳定的系统构建。
23 0
|
6天前
|
消息中间件 监控 持续交付
构建高效微服务架构:后端开发的进阶之路
【4月更文挑战第20天】 随着现代软件开发的复杂性日益增加,传统的单体应用已难以满足快速迭代和灵活部署的需求。微服务架构作为一种新兴的分布式系统设计方式,以其独立部署、易于扩展和维护的特点,成为解决这一问题的关键。本文将深入探讨微服务的核心概念、设计原则以及在后端开发实践中如何构建一个高效的微服务架构。我们将从服务划分、通信机制、数据一致性、服务发现与注册等方面入手,提供一系列实用的策略和建议,帮助开发者优化后端系统的性能和可维护性。