Android 清洁体系结构中令人困惑的术语交互者

Android 清洁体系结构中令人困惑的术语交互者,android,design-patterns,architectural-patterns,Android,Design Patterns,Architectural Patterns,按照干净的体系结构,设计交互器是包含所有业务逻辑的一部分。“交互者”这个词让我很困惑。在我看来,Interactor似乎喜欢在两个不同的层之间进行交互,比如数据层和演示者层 这个词用得对吗? 有人能澄清一下Interactor的目的吗?它遵循哪种模式? 如果Interactor不是我认为的那样,那么设计模式是什么 层-层交互?据我所知,它相当于模型-视图-演示者(MVP)体系结构中的演示者 它执行业务逻辑,而不是存储或显示数据。它创建了一个独立于数据存储或显示方式或位置的独立层。它只关心任何格式

按照干净的体系结构,设计交互器是包含所有业务逻辑的一部分。“交互者”这个词让我很困惑。在我看来,Interactor似乎喜欢在两个不同的层之间进行交互,比如数据层和演示者层

这个词用得对吗? 有人能澄清一下Interactor的目的吗?它遵循哪种模式? 如果Interactor不是我认为的那样,那么设计模式是什么
层-层交互?

据我所知,它相当于模型-视图-演示者(MVP)体系结构中的演示者

它执行业务逻辑,而不是存储或显示数据。它创建了一个独立于数据存储或显示方式或位置的独立层。它只关心任何格式的输入和输出。它可以在观察者、适配器和外观模式的组合中使用,分别作为回调接口、代码的通用扩展点和任何非UI或数据存储使用的解耦入口点


我假设它被称为交互器,因为视图与它交互以计算值和刷新任何显示的UI元素,并且它与模型对象交互以提取数据。它还可以与用于CRUD操作的数据库交互,但我认为这主要是在存储库模式中解决的,因为这不是真正的业务逻辑

这是MVP模式。是的,正如您所说,它是演示者和数据之间的中介(作为rest调用或共享首选项或Sqlite的一种形式)。

交互者是一种与“业务逻辑”概念无关的设计模式。在不深入细节的情况下,Interactor模式是Command模式的扩展;每个“业务逻辑”对象都被视为一个“黑匣子”,一条简单的指令要为客户机执行,将调用操作的对象与知道如何执行操作的对象分离。(有关详细说明,请参阅参考书目)

在android环境中,有一个简单的“规则”,要求程序员在后台线程中执行耗时较长的任务,因此interactor模式扩展了“命令模式”,添加了一层线程。所有这些复杂的东西都是为了创建一个“干净的体系结构”,其中包含一个可伸缩、可维护和(可以说)可理解的代码

关于这个问题。。?层交互的设计模式是什么?根据具体情况,它可能有不止一个正确的答案。您可以使用一个简单的接口作为入口点,因此您可以使用适配器模式,或者Facade模式,或者如果您想做一些更高级的事情,您可以实现一个eventbus系统

资料来源:
简单解释设计模式-auth Alexander Shvets。第14页(适配器)、第32页(命令)、第47页(外观)

Interactors提供了各种用例的实现。理想情况下,每个用例应该有一个交互者,但它可能会根据应用程序的规模而有所不同

现在,为什么它不适用于所有应用程序?假设您有两个应用程序。在第一个应用程序中,您只需要读取一个用户。在另一个应用程序中,只需更新同一个用户。您将有两个不同的交互程序,如GetUserInteractor和UpdateUserInteractor。仔细想想,UpdateUserInteractor对于第一个应用程序(反之亦然)来说是有意义的,对吗?但是两个应用程序的业务/域逻辑仍然可以相同,其中包括两个服务的实现(读取和更新),例如,在关于业务/域对象(或作为单独的用例对象)中。这些对象显然封装了与应用程序无关的业务规则,因为它们可以插入到两个或多个不同的应用程序下

应用程序和用户之间的通信通常是特定于应用程序的。正如其他人已经提到的,您可以让您的交互者对用户操作执行命令。或者你也可以用另一种类似的方法。但是命令模式非常方便,可以说它使整个代码更加一致、统一和易于理解

最后但并非最不重要的一点是,交互者的另一个重要方面是“边界接口”,即为输入和输出交付而部署的类

(PS:例如,在Android中,使用新的体系结构组件,当您将输入事件向下传递到业务逻辑(或域模型)时,片段/活动可以被认为是输入边界的实现)-它是控制器。LiveData更像输出边界实现,因为它在引擎盖下使用观察者模式,并通过交互器将数据传递回UI。在这种情况下,我认为这使得ViewModel成为交互器的有力候选对象,因为它接收输入事件(以及与这些事件对应的命令),还包含要观察的LiveData实例。所有这些都是解耦的,还是以多态方式部署的?好吧,这主要与您的设计有关。而对于协同路由,现在似乎不需要回调/侦听器-因此这是另一个方面。)


这是我的观点。我希望这是清楚的。

在干净的体系结构方法中,用例交互器是一个表示特定业务规则的层。用例交互器与实体交互(不可知的业务规则)实现用例意图。实体可以在另一个应用程序中使用,一旦它们是不可知的,另一方面,用例交互者是特定的应用程序对象


可以在Robert C.Martin的《清洁体系结构》一书第20章中找到,如果您熟悉领域驱动设计,那么可以将一个交互器比作一个应用程序服务。此外,说“根据清洁体系结构,设计交互器是一部分”是不正确的