最近我在做的Flutter项目,我决定使用Clean Architecture来采用一个功能驱动的架构。经过详细的软件设计,它非常适合逻辑的划分。然而,这些天来,我对仓库的使用产生了一个问题。在一个使用Firestore的应用程序中,仓库是我与这些数据交互的层,在不同的功能上划分它们,同时仍然使用相同的集合,这是正确的吗?(不同部分由不同特征组成,但涉及相同的数据集合)。在工作结束时,我可能会发现几个代码相同的仓库类,即使它们属于不同的特性**。澄清将不胜感激!提前感谢
o75abkj41#
存储库是从外部数据源检索/管理数据的一个很好的模型。这个模型是面向实体的。也许这就是促使你问这个问题的原因。我认为功能驱动设计并不要求所有东西都面向功能。我的意思是这个设计决定了你的领域层分类,但不是所有的。仅仅因为每个特性有一个处理程序并不意味着你必须多次重新编码存储库。存储库是基础架构层的一部分。它的接口可以共享如果您的应用程序上有多个域,则可以使用多个项目/模块。在域层的某个地方(在要素类管理器中),您将使用存储库加载一些数据。您需要确保的是,您使用的是接口,而不是依赖于存储库实现(也许这对您来说已经很清楚了,只是为其他读者提供的一点)。例如,您可以使用OrderReservationRepository中的IClientRepository来加载客户数据。无论你使用哪种设计,你都会面临的困难是:
关于第一点,有几种方法:
对于第二点,我认为无论使用什么设计,它总是相同的难度:
我的观点是,这取决于上下文。设计是用来让事情变得简单,而不是复杂化的。如果我在系统中完全使用存储库模型,并面对使用许多过滤器进行数据搜索的屏幕实现,我将随时使用自定义查询或存储过程来加载聚合数据,我不会因为模型的原因而使实现复杂化或使加载非常慢。我认为这里非常重要的一点是知道何时打破规则。没有模型可以解决所有问题。另外,一个模型通常只能解决一个问题结论,在软件项目中,我们总是需要:
好的设计将帮助您轻松区分这三种用途。
1条答案
按热度按时间o75abkj41#
存储库是从外部数据源检索/管理数据的一个很好的模型。
这个模型是面向实体的。也许这就是促使你问这个问题的原因。我认为功能驱动设计并不要求所有东西都面向功能。我的意思是这个设计决定了你的领域层分类,但不是所有的。仅仅因为每个特性有一个处理程序并不意味着你必须多次重新编码存储库。存储库是基础架构层的一部分。它的接口可以共享如果您的应用程序上有多个域,则可以使用多个项目/模块。
在域层的某个地方(在要素类管理器中),您将使用存储库加载一些数据。您需要确保的是,您使用的是接口,而不是依赖于存储库实现(也许这对您来说已经很清楚了,只是为其他读者提供的一点)。
例如,您可以使用OrderReservationRepository中的IClientRepository来加载客户数据。
无论你使用哪种设计,你都会面临的困难是:
关于第一点,有几种方法:
对于第二点,我认为无论使用什么设计,它总是相同的难度:
我的观点是,这取决于上下文。设计是用来让事情变得简单,而不是复杂化的。如果我在系统中完全使用存储库模型,并面对使用许多过滤器进行数据搜索的屏幕实现,我将随时使用自定义查询或存储过程来加载聚合数据,我不会因为模型的原因而使实现复杂化或使加载非常慢。我认为这里非常重要的一点是知道何时打破规则。没有模型可以解决所有问题。另外,一个模型通常只能解决一个问题
结论,在软件项目中,我们总是需要:
好的设计将帮助您轻松区分这三种用途。