在自定义视图中添加 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
不关心什么以及何时记录。
所以我可以说我有一个要求,每当按下特定按钮时,我应该调用网络服务来发送一些日志。
此按钮适用于多个屏幕,所以我为什么不将它放在 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
不关心什么以及何时记录。