当前位置: 首页 > 科技观察

使用Golang构建干净的架构

时间:2023-03-13 15:53:33 科技观察

什么是干净的架构?在《Clean Architecture: A Craftsman’s Guide to Software Structure and Design》一书中,著名作家罗伯特“鲍勃叔叔”马丁提出了一种架构,它具有一些重要的特性,如框架的可测试性、数据库和接口的性和独立性。干净架构的约束是:独立的框架。该体系结构不依赖于某些具有特征的软件库的存在。这允许您将这些框架用作工具,而不是将您的系统束缚在有限的约束中。可测试的。无需UI、数据库、Web服务器或任何其他外部元素即可测试业务规则。独立的用户界面。无需更改系统的其余部分即可轻松更改UI。例如,可以在不更改业务规则的情况下将WebUI替换为控制台UI。独立的数据库。您可以用Mongo、BigTable、CouchDB或其他数据库替换Oracle或SQLServer。您的业??务规则与数据库无关。独立于任何外部代理。事实上,您的业务规则根本不需要了解外部组成。了解更多:https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html因此,基于这些约束,每一层都必须是独立的和可测试的。从UncleBob的架构来看,我们可以将代码分为4层:Entities:封装企业范围的业务规则。Go中的实体是一组数据结构和函数。用例:该层中的软件包含特定于应用程序的业务规则。它封装并实现了系统的所有用例。控制器:这一层的软件是一组适配器,将数据从最方便的用例和实体转换为最方便的外部代理,例如数据库或网络。FrameworksandDrivers:这一层通常由框架和工具(如数据库、Web框架等)组成。用Golang构建干净的架构我们以用户包为例:在entity.go文件中,我们有自己的实体:在repository.go文件中,我们定义了repository的接口,用于保存存储实体.在这种情况下,存储库意味着Bob大叔架构中的框架和驱动层。上面写着:这个接口可以在任何类型的存储层实现,比如MongoDB、MySQL等。在我们的例子中,我们使用MongoDB来实现,如mongodb.go所示:service.go文件代表UncleBob定义的用例层。在文件中,我们有服务接口及其实现。Service接口是:最后一层,我们架构中的Controller是在api的内容中实现的:在下面的代码中,从api/main.go我们可以看到如何使用这些服务:现在我们可以轻松创建包测试,例如:使用干净的架构,我们可以在不破坏应用程序其他部分的情况下将数据库从MongoDB更改为Neo4j。这样,我们就可以在不损失质量和速度的情况下开发我们的软件。引自https://hackernoon.com/golang-clean-architecture-efd6d7c43047https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html