MVP 模式 Android 演示者中的重复方法

MVP pattern Android duplicated methods in presenters

我有几个活动,虽然每个活动都很独特,但必须有一些常见的 api 调用,例如 getCurrentUser() 或 updateUser()

考虑到 MVP 模式(我目前正在使用 MVP mosby),因为每个 activity 只有一个演示者。在我开发过程中,似乎有时我会在这些演示者中复制粘贴很多这些常见的 api 调用。假设我有 api 呼叫 A、B、C、D。

Presenter 1使用A,C,

B、D、A在presenter 2中使用,

C、E用于presenter 3 .....

等等。真的很难找到一个 "common" 的 presenter 来继承。所以 api 调用,C 和 A 基本上是复制粘贴的。

我的问题是,鉴于目前的情况,避免代码复制粘贴的最佳方法是什么?这几乎是不可避免的吗?还是我应该尽最大努力做 OOP,但每次 API 调用来自不同的演示者 added/removed 时都要冒着大量重构的风险?

我认为,如果您不使用继承的 OOP 样式来进行重构,您将面临更多的重构风险。 假设您想修改处理某些 api 调用的方式。如果您正在复制代码,则必须首先在复制代码的所有地方进行重构。如果继承普通的presenter,只需要修改一次即可。

您应该通过将所有 API 调用放在一个或多个可以从任何演示者引用的 Java 类 中来分离您的公共 API 和演示者代码。

因此。 服务 A 存在 (A Java Class).

ServiceA 执行 API 次调用 A、B、C、D。

可以从Presenter1、Presenter2、PresenterN、PresenterN+1调用服务A。 主持人是什么应该无关紧要。

如果您想限制某些演示者访问不同的 API 呼叫。那么这个时候就应该考虑有ServiceA、ServiceB、ServiceC了。其中ServiceA只能API调用A和D,Service B和Service C的行为类似。

将您的 Presenter 代码与通用代码(Web 服务、内部 API、w/e 代码)分离将使您无需复制和粘贴即可扩展。

祝你好运。

您应该为您的 API 创建包含所有 API 请求的界面。然后创建执行这些请求的单例 class,您可以轻松地从演示者那里访问此 class。

现在您仍然会有一些重复,您将需要在演示者中多次调用此单例并在每个单例中处理响应,但这就是您需要做的。每个演示者都应该能够以不同的方式处理响应,因此您不能将它们打包为一个(即使它们通常会以相同的方式处理 - 通过将数据传递给视图)。

如果您认为您正在编写大量类似的代码但什么都不做,那么这就是您使用 MVP 所得到的。您还可以获得出色的测试能力、更轻松的重构和轻松的请求模拟 - 您可以将真实的单例替换为实现相同接口且一切正常的模拟。

Interactor模式(用例模式)可以解决您目前重复代码的问题。

想法是将 getCurrentUser()updateUser() 方法背后的所有逻辑提取到 class(交互器)中,并在多个演示者中使用此交互器。

这是一个非常简单的解释。例如,我建议您从 this post and this post 开始做更多研究。