Итак, у меня есть, скажем, требование, согласно которому всякий раз, когда нажимается конкретная кнопка, я должен вызывать веб-сервис для отправки некоторых журналов.
Эта кнопка присутствует для нескольких экранов, поэтому я подумал, почему бы не поместить ее в CustomView View
и не вызвать веб-сервис оттуда?
Затем я просто добавлю это пользовательское представление в макет xml, и мне больше не придется ни о чем беспокоиться. Это хорошая идея?
Если это не так, может ли кто-нибудь предложить лучшее решение? Спасибо.
Есть ли какая-то конкретная архитектура, которую вы сейчас используете?
Часть проекта @TentenPonce использует MVP, но мы пытаемся перейти на MVVM.
Я бы посоветовал вам создать класс, скажем, 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
}
Следуя этому шаблону, вы можете легко выполнять модульные тесты на своем презентере, например проверять, действительно ли вызываются журналы (вы также можете указать точный ввод).
Примечание: Если вы используете чистую архитектуру, я рекомендую поместить ее на уровень домена (Interactor/UseCase)
, так как Presentation Layer
все равно, что и когда регистрировать.
Пожалуйста, проверьте мое предложение