在干净的体系结构设置中使用gorm时,我需要持久性模型吗?



在一个干净的软件体系结构方法中,实体是最内层,不应该依赖于ORM之类的东西。

为了方便,我想在我的项目中使用ORM,而gorm似乎是一个流行的库。在gorm文档中,推荐的使用方法是将gorm.Model结构包含在您希望在数据库中持久化的结构中。

当我尝试在我的项目中使用gorm并遵循干净的体系结构时,我最终得到了一个映射层,它将我的实体映射到特定于gorm的持久性模型之间,从而使gorm依赖于我的实体。这似乎消除了使用ORM的所有好处,例如,在这篇博客文章中明确警告了。

在我看来,避免映射层,而遵循干净的架构只能通过使用侵入性较小的ORM,甚至只是一个sql扩展,如sqlx,我可以直接使用我的实体来实现?

我感觉这个问题更适合软件工程SE,但我将尝试回答。

对你的问题的简短回答是:是的。

如果你想严格遵循Clean Architecture,要做的就是构建完全不依赖于你的持久层的领域模型。对于gorm,这需要构建一个域<->持久化模型映射层和所有由此增加的复杂性。比起创建自己的查询,Gorm仍然可以使查询和保存持久化模型更容易,并且与我所经历过的其他语言的orm相比,它仍然相当轻量级。

从技术上讲,您不需要在模型结构中使用来获得gorm.Model。有一个ID int字段,加上您想要的任何CreatedAt,UpdatedAt,DeletedAt字段就足够了。模型给你)。但是不可避免地,您将添加与gorm如何做事情有关的其他工件,因此,如果gorm包没有出现在您的模型结构中,您就无法逃避这种依赖性。

,

这就引出了一个问题:对你的项目来说,完全遵循Clean Arch是否是正确的决定。像所有的设计决策一样,它需要权衡,并且根据所构建系统的范围和复杂性或多或少有意义。如果你预见到项目可能遇到的挑战,而Clean Arch可以缓解这些挑战,那么现在的额外投资就会得到回报。另一方面,如果体系结构的某些方面可以缓解您在特定情况下不太可能遇到的问题,那么您可能会更加宽容。你所链接的博客文章的结论也提出了同样的论点:

NHibernate提供了一组最佳的实现复杂性和整体纯度。还会有然而,ORM涉及泄漏到您的域模型中。但是我认为一个低价格的所有好处,你会得到的:速度开发、丰富的功能和关注点分离。

相关内容

  • 没有找到相关文章

最新更新