У меня есть специальный чехол, как показано ниже. У меня есть класс Listener и класс Uploader. Класс слушателя прослушивает сообщения по сети, обрабатывает их и создает из него еще один маленький объект.Неплохая практика иметь класс вспомогательного помощника?
public class Listener {
Uploader uploader;
Listener(String location) {
uploader = new Uploader(location);
}
public void listen(Message msg) {
ProcessedObject obj = process(msg);
uploader.add(obj);
}
public void terminate() {
if (null != uploader) {
uploader.finish();
}
}
}
Класс Uploader принимает один объект с помощью метода добавления, и решает, когда Uploader. Для этого он ведет список. Он также имеет строку местоположения, которая относится к одному слушателю. Вот суть:
/**
* This class is not thread safe, and an object should not be shared across threads
*
*/
public class Uploader {
String location;
List<ProcessedObject> objects;
Uploader(String location) {
this.location = location;
}
void add(ProcessedObject obj) {
objects.add(obj);
if (objects.size() > PARTITION_SIZE) {
uploadObjects(objects);
objects.clear();
}
}
void finish() {
uploadObjects(objects);
}
}
Таким образом, загружать, если количество объектов больше, чем partition_size. В приложении есть несколько слушателей, каждый из которых работает в отдельном потоке. У каждого слушателя будет свой собственный объект uploader. Я четко упомянул, что этот класс не является потокобезопасным, в javadoc.
Теперь мой вопрос: это хорошая практика?
Некоторые из моих коллег говорят, что это не очень хорошая практика и предлагают использовать статический метод для загрузки, а не создавать экземпляр загрузчика. Но мой аргумент заключается в том, что мой класс слушателя будет беспорядочным (потому что тогда слушателю придется поддерживать подсчеты, а также проверять и загружать снова в конце до завершения для оставшихся объектов)
С моим подходом полное разбиение и загрузка логика доступна в классе загрузчика, поэтому она улучшает читаемость и удобство обслуживания.
Мой вопрос в том, что мой подход плохой практики (учитывая также, что я специально призываю, чтобы загрузчик не был потокобезопасным)?
Кроме того, есть ли какой-либо шаблон дизайна для того, что я пытаюсь сделать здесь? Если да, то какой?
Редактировать: Я принимаю Я не задал вопрос правильно. Меня здесь не интересует раздел или выгрузка. Просто подход к созданию одного объекта класса Uploader для каждого потока, а также для создания без статичного класса Uploader со статическими методами для выполнения задания.
Независимо от того, загружаю ли я оставшиеся объекты, или вообще я должен разделять, это не проблема этого вопроса.
Если я не ошибаюсь, в этом случае мне придется вести общий список объектов, которые поток пользователей может контролировать и загружать через равные промежутки времени. Это то, что вы предлагаете? – Kartik
@ Kartik это одна возможная реализация. или каждый поток слушателя может иметь связанный поток (ы) пользователя. я считаю, что он должен быть полностью прозрачным для слушателя. –
Это действительно имеет смысл. Но даже в этом случае, это загрузчик, который должен поддерживать состояние для правильного разделения? – Kartik