我最近写了一个Go微服务应用程序,这个程序的设计来自三个灵感:
-
清晰架构"Clean Architecture"¹ and SOLID (面向对象设计)² 设计 原则³
-
Go的简洁设计⁵ 特别是 Go的面向对象的设计⁶
我使用Spring的基于接口的编程和依赖注入(Dependency Injection)来实现Bob Martin的清晰架构(Clean Architecture),并遵循了Go的简单编程风格。当它们之间存在冲突时,进行了取舍。我只采用了Clean Architecture的设计原则(主要是SOLID),因此实现的细节可能与其他SOLID实现不同。
我来自Java背景,对前两个设计思想非常熟悉。在学习了Go之后,我逐渐认同了Go的简单风格。粗略来说,有两种不同的编程风格,一种是面向对象的, 它强调设计;另一种是非面向对象的,它信奉用最简单的代码来实现用户需要的功能,无需预先设计。 Go更接近第二阵营,尽管它有一些面向对象的功能。 Go的编程思路为我提供了一个重新评估面向对象编程的新视角,并影响了我的编码风格。结果是我只在必要时才进行面向对象的设计,而我更倾向于使用更简单的解决方案而不是完美的方案。
设计原则:
-
基于接口编程(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 *config

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

被折叠的 条评论
为什么被折叠?



