Организация архитектуры wildcard - интерфейсов

241
18 октября 2017, 04:55

Есть интерфейсы (много) такого типа

public interface OnProfileRequestListener {
     public void onResponse(Profile profile);
     public void onError(int errorType);
}

И такого типа

public interface OnDialogsRequestListener {
     public void onResponse(List<Dialog> dialogs);
     public void onError(int errorType);
}

Как мне лучше изменить их на wildcard'ы? Создать один общий и передавать в его тип как коллекции элементов так и сами элементы (OnResponseListener<Profile>, OnResponseListener<List<Dialog>>)

public interface OnResponseListener<T> {
     public void onResponse(T response);
     public void onError(int errorType);
}

Или оставить этот для элементов, а для коллекции другой создать? И, кстати, как такие интерфейсы называть? OnResponseListener?

Answer 1

Про выбор имен процитирую Роберта Мартина (Чистый Код, глава 2)

Имя переменной, функции или класса должно отвечать на все главные вопросы. Оно должно сообщить, почему эта переменная (и т. д.) существует, что она делает и как используется. Если имя требует дополнительных комментариев, значит, оно не передает намерений программиста.

...

Имена классов и объектов должны представлять собой существительные и их комбинации: Customer, WikiPage, Account и AddressParser. Старайтесь не использовать в именах классов такие слова, как Manager, Processor, Data или Info. Имя класса не должно быть глаголом.

Резюмируя - имя должно быть таким, чтобы посторонний человек(разработчик) при взгляде на него мог в общих чертах понять, для чего конкретно (за что конкретно отвечает класс с именем DataManager?) предназначен этот класс.

По поводу интерфейсов.

В вашем случае все эти интерфейсы используются в реализации функций обратного вызова при обращении к одному конкретному REST API(если я правильно понял). В таком случае самым грамотным будет использовать единый, наиболее общий интерфейс, без разделения на списки и единичные объекты. Я бы назвал его, например, NeboMobiResponseListenerInterface. Не надо бояться длинных имен. Длинное понятное имя гораздо лучше, чем короткое и непонятное.

READ ALSO
Как вывести текущий объект массива в цикле

Как вывести текущий объект массива в цикле

На входе получаем имя департамента, а на выходе должны быть имена всех рабочих из этого отделаНе могу разобраться с написанием цикла который...

336
Как реализовать класс Date и Calendar [требует правки]

Как реализовать класс Date и Calendar [требует правки]

Определить класс Data и класс Calendar на определённый месяц, использующий объект Data в качестве поляОбъявить массив объектов Calendar на год

249
Retrofit + RxJava + Unit test

Retrofit + RxJava + Unit test

Есть unit test для Retrofit запросы щас мне возвращают типизированые ответы от сервера Call<List<GroupObject>> в таком виде достаточно просто его тестировать:

306
Для чего нужны переменные счетчики

Для чего нужны переменные счетчики

Я только недавно натолкнулся на этот термин, и я не понимаю для чего они нужны и когда использовать

272