Одним из подходов являются ведущим P
холдинга вида V
и вида V
унаследует V1
, V2
... Vn
. Методы будут доступны для V
во всех контейнерах View (Фрагменты и действия).
public interface MainView extends BaseView, ErrorView{ //V
void showProducts(@Nullable List<Product> products);
}
public interface BaseView{ //V1
void setLoading(boolean loading);
void showConfirmationDialog(@StringRes int title, @StringRes int message);
}
public interface ErrorView{ //V2
void showErrorSnackBar(@StringRes int message);
}
public class ProductListFragment extends ... implements MainView{
}
По моему опыту, это работает отлично, кроме беспорядка и пустых методов, что не хорошо с точки зрения читаемости.
Держать ссылки других Ведущих внутри вашего основного докладчика прекрасно, пока вы гарантируете, что они живы. Это может привести к анти-шаблону.
Другой подход апеллирует каждый ведущий отдельно, и каждый из них потребляет событие автономным:
@Override
public void showProducts(List<Product> products){
// do something with products that Presenter1 has dispatched for presenting
presenter2.doSomethingOnProducts();
}
Это бесшовные связи между заинтересованными сторонами в результате.
Смешивание Observer
Узор с MVP тоже прекрасен.
Может ли основной обзор поговорить с главным докладчиком, который рассказывает об основном представлении и суб/вложенных представлениях. А суб/вложенные взгляды говорят со своими ведущими? – Deal
HI Deal, Что вы подразумеваете под вложенным представлением? Иерархически в XML? Логически? Приведите пример. Если у вас несколько видов на экране, и какое-то представление логически вложено, лучше использовать плоскую структуру view-presenter без какой-либо вложенности. Давайте посмотрим на пример экрана приложения Gmail в [этой статье] (http://hannesdorfmann.com/mosby/mvp/). Не могли бы вы указать на вложенный вид в этом примере? – Torbik
Кроме того: Конкретный вид должен взаимодействовать только с его презентатором. И лучше, если конкретный Presenter не взаимодействует с каким-либо представлением, кроме своего собственного. Если Presenter хочет изменить smth в другом представлении, он должен вытолкнуть Presenter этого представления (например, используя шину событий) или повлиять на другое представление через Модель. – Torbik