在自定义视图中添加 Web 服务请求是个好主意吗?

Is it a good idea to add a WebService Request inside a Custom View?

所以我可以说我有一个要求,每当按下特定按钮时,我应该调用网络服务来发送一些日志。

此按钮适用于多个屏幕,所以我为什么不将它放在 CustomView View 中并从那里调用网络服务?

然后我将把这个自定义视图添加到 xml 布局中,我再也不用担心任何事情了。这是个好主意吗?

如果不是,有人可以提出更好的解决方案吗?谢谢

我建议您创建一个 class 让我们说 RequestSender 具有字符串日志作为构造函数的参数。

然后您将创建一个触发发送过程的方法send()

并且任何时候您想要发送日志,您将按以下步骤进行:

RequestSender request = new RequestSender(string logs);
request.send();

至于您现有的架构(MVP),最好将逻辑放在 Presenter 中,实际上 View 上不应该有任何逻辑(在您的情况下,自定义视图) 除了接受输入(例如:单击按钮)并提供输出。

假设您在按钮上设置了点击监听器(当然好):

button.setOnClickListener { yourPresenter.doSomeAction() }

在 YourPresenter 中:

fun doSomeAction() {
   //do necessary action for the button
   //after that, send logs
}

按照这些模式,您可以轻松地对演示者进行单元测试,例如测试是否实际调用了日志(您也可以指定确切的输入)。

注意: 如果您使用的是 Clean Architecture,我建议将其放在域层 (Interactor/UseCase) 因为 Presentation Layer 不关心什么以及何时记录。