
课程咨询: 400-996-5531 / 投诉建议: 400-111-8989
认真做教育 专心促就业
我们在前几期的文章中给大家简单介绍了领域驱动设计的一些基础知识等内容,而本文我们就继续来学习一下,软件开发接口设计模式应用分析。
对于一个产品我们要考虑的不只是产品本身能解决的业务需求,还需要在部署上有所追求。如果项目初期的并发量很小,客户可能采用单进程的方式部署,慢慢地单进程扛不住了会升级到集群的方式,终还要升级到微服务的方式。如何在单进程、集群和微服务之间进行无缝切换呢?
再过去单机和集群项目与微服务项目是不能兼容的,因为领域模型都是类(class)而不是接口(interface)。具体来说:服务提供者(provider)的User对象与服务消费者(Consumer)的User对象是不兼容,不兼容将导致在单机项目中使用的是服务提供方的内部User对象,而一旦迁移到微服务项目后,需要大量的修改工作。要把以前调用方使用内部User对象替换为服务消费者提供的User对象。这样的工作也是不可以逆的,一旦迁移成功就不能降级到单机环境了。
再过去我们确实把服务(service)设计成了接口,这种接口的设计对于内部的开发看似会有帮助,但是从实战的经验来看却不像大家想象的那样可以为Service提供不同的实现。因为现在都是迭代开发,都是一个版本一个版本的去不断完善应用服务代码,而不是替换应用服务代码,所以在IDDD中把应用服务(ApplicationService)类型由接口(Interface)改为了类(Class)。
如果我们把领域对象设计成接口类型,并与服务接口以及其它接口一起组织在一个新的模块内,形成一个新的接口(API)模块。然后为各种不同地端口提供适配此端口的实现,这样的设计使得调用者只需要使用User接口(user-api)开发业务,并且在单进程(Standalone)环境中只需要依赖user模块,在微服务环境中只需要依赖user-openfeign-client模块,在外部环境中只需要依赖user-rest-client模块。调用者通过依赖不同地实现模块来解决不同环境的无缝切换,并且调用者使用的代码是不需要改变的。
【免责声明】本文系本网编辑部分转载,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与管理员联系,我们会予以更改或删除相关文章,以保证您的权益!更多内容请加danei0707学习了解。欢迎关注“达内在线”参与分销,赚更多好礼。