清晰架构(Clean Architecture)的Go微服务: 设计原则

本文探讨了如何在Go语言中应用Clean Architecture和SOLID设计原则来构建微服务,强调了基于接口编程、依赖注入和正确建立依赖关系的重要性。通过实例展示了从MySQL迁移到MongoDB以及调用RESTful服务时所需改动,说明了良好设计在需求变更时的优势,同时也分析了设计带来的成本。文章最后讨论了设计的必要性和灵活性,认为在动态部署环境中,这种设计并非过度设计。
摘要由CSDN通过智能技术生成

我最近写了一个Go微服务应用程序,这个程序的设计来自三个灵感:

我使用Spring的基于接口的编程和依赖注入(Dependency Injection)来实现Bob Martin的清晰架构(Clean Architecture),并遵循了Go的简单编程风格。当它们之间存在冲突时,进行了取舍。我只采用了Clean Architecture的设计原则(主要是SOLID),因此实现的细节可能与其他SOLID实现不同。

我来自Java背景,对前两个设计思想非常熟悉。在学习了Go之后,我逐渐认同了Go的简单风格。粗略来说,有两种不同的编程风格,一种是面向对象的, 它强调设计;另一种是非面向对象的,它信奉用最简单的代码来实现用户需要的功能,无需预先设计。 Go更接近第二阵营,尽管它有一些面向对象的功能。 Go的编程思路为我提供了一个重新评估面向对象编程的新视角,并影响了我的编码风格。结果是我只在必要时才进行面向对象的设计,而我更倾向于使用更简单的解决方案而不是完美的方案。

设计原则:
  1. 基于接口编程(Programming on interface)

    本程序有三个主要业务层,用例(usecase),数据服务(dataservice)和域模型(model),其中只有域模型没有接口,因为没有必要。 当你访问外部服务时,你可以通过接口进行访问。

    // sqlUserDataServiceFactory is a empty receiver for Build method
    type sqlUserDataServiceFactory struct{
         }
    
    func (sudsf *sqlUserDataServiceFactory) Build(c container.Container, dataConfig 
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值