您可以在具有简洁架构的功能之间共享模型吗?

Mik*_*ink 5 flutter clean-architecture

我的应用程序具有以下文件夹结构

app
    core
    features
        feature1
            domain
                entities
                    entity1
                    entity2
                    entity3
                    entity4
                    entity5
                    entity6
            data
                models
                    model1
                    model2
                    model3
                    model4
                    model5
                    model6
            presentation
        feature2
            domain
                entities
                    entity1
                    entity2
                    entity3
                    entity4
                    entity5
                    entity6
            data
                models
                    model1
                    model2
                    model3
                    model4
                    model5
                    model6
            presentation
Run Code Online (Sandbox Code Playgroud)

这两个功能的模型 1 到 6 完全相同,并且随着应用程序的扩展,还会有更多功能出现。这变得越来越难以维护。干净的架构是否允许跨多个功能共享模型和实体?这是通过核心文件夹完成的吗?

Ren*_*ink 3

是的,你可以,但你也许不应该这样做。

是的,因为干净的架构没有对此做出声明。只要遵守依赖关系规则,您就符合干净的架构。

但你也许不应该这样做,因为你应该考虑其他原则和考虑因素。

首先,你应该问自己这是否违反单一责任原则。有时事情看起来相同,但实际上并不是重复的代码。他们看起来一样更像是一个意外。问题是“谁是变革触发者?”。通常,功能会因不同原因而发生变化,因此功能用例和实体也会因不同原因而发生变化。如果是这样,您不应该在它们之间共享模型。

其次,从DDD(领域驱动设计)的角度来看,这些功能可以位于不同的有界上下文中。在这种情况下,您可以有两个具有相同名称的实体,但它们在不同的上下文中具有不同的含义。因此,模型具有不同的属性和不同的方法。

如果您决定共享模型,您应该定期仔细查看它们并扫描属性和方法。是否有专门用于某一功能的属性和方法?如果是这样,您可能会感到担忧。

最后,如果您面临诸如“呃,我们在这里更改了某些内容并在那里破坏了某些内容”之类的问题,您应该重新考虑共享某些代码是否是一个好方法。代码共享总是耦合代码,因为所有客户端都依赖于共享代码。这是重复(维护成本)和依赖性之间的权衡。SRP 等原则可帮助您做出有根据的猜测。