powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / single responsibility principle или DRY
2 сообщений из 2, страница 1 из 1
single responsibility principle или DRY
    #38990233
msangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Доброй ночи.

И у меня вопрос. Сейчас создам абстрактную ситуацию с этой же проблемой.

Допустим есть школа курсов.
В школе есть курсы
Cource{
Sring id;(PK)
String name;
}

и студенты

Students{
Sring id;(PK)
String firstName;
String lastName;
}

Ну и само собой, они между собой связаны, на любой курс может записаться любой студент:
CourceStudents{
String id;(PK)
String courceId(FK);
String studentId(FK);
}

Теперь.

Изначально задача звучала так:
>Дайте нам список студентов, и мы хотим видеть список всех курсов для каждого студента, хотим назначать определенные курсы каждому (добавлять в этот список) или удалять

Путем нехитрых манипуляций была создана система запросов, содержащих в себе иннер джойн, который джойнит инфу из таблицы CourceStudents вместе с данными из таблицы Cource.
Т.е. клиенту(API) выдавались такие данные:
GET: /students
[{id:1, firstName:'Artem', lastName:'Ivanov'},{id:1, firstName:'Alexandr', lastName:'Tkachenko'}]
это метод просто для получения всех студентов

GET: /cources?studentId=1233212
Response: {id: '12_ид_из_таблицы_CourceStudents_21', name: '121_name_из_таблицы_Cource_12', studentId: '1233212_просто_возвращаем_его_хотя_он_и_так_в_запросе'}
а это метод ля получения всех курсов определенного студента

(для простоты опустим, что там на самом деле возвращается список)

Все работает, клиент доволен.

Потом были добавлены новые требования:
>мы бы хотели видеть еще всех студентов определенного курса и делать управление там

т.е. клиент хочет иметь еще и такое апи:
GET: /students?courceId=1233212
Response: {id: '12_все_тот_же_ид_из_таблицы_CourceStudents_21', firstName: 'Артем', lastName: 'Иванов', studentId: '1233212_а_вот_теперь_это_важно'}

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

У меня(на уме) есть несколько вариантой действий:
1) Сделать все то же самое, только джойнить с данными из другой таблицы, т.е. написать немного другой код но для для той же логики и для той же таблицы, писать новый парсер ответа от базы(пускай это будет RowMapper от Spring JDBCtemplate) и новый ендпойнт, кароч писать кучу кода, которая по сути делает уже то что было сделано, дублировать логику и все такое.

2) Использовать существующий код, получения связей, сделать нему условия для получения студентов по курсу
т.е. сначала получаем данные в таком виде:
{id: '12_ид_из_таблицы_CourceStudents_21', name: '121_name_из_таблицы_Cource_12', studentId: '1233212'}
Из всего этого нас сейчас интересует две вещи: это ид связи и ид студента. Имея ид студента, мы делаем другой запрос в базу, уже получения полной инфы о студентах по их ид. Далее просто сопоставляем данные и возвращаем пользователю нужный ответ.

Т.е. вопрос стоит в том что лучше:
Повторное использование кода и отсутствие дублирования логики но несколько запросов в базу ЛИБО один запрос в базу, но куча кода, который делает то же самое с теми же дынными, но в другом представлении.

Приложение не является критичным по производительности, но критическим по поддерживанию. Если бы производительность была критичной, я бы не думая выбрал первый вариант. А тут даже не знаю. Вроде два запроса это не так уж и плохо. Ну, логика будет немного запутана, зато никакого дублирования. С другой стороны написать полный стек конвертеров, логики, держа все "просто" тоже неплохо, тем более в том случае всегда можно будет изменить реализация в одном месте, не трогая в другом. Такая себе борьба single responsibility principle и DRY.

Что можете посоветовать?
...
Рейтинг: 0 / 0
single responsibility principle или DRY
    #38990246
msangel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Скажу даже более - у меня используется не простая база данных, а очень тяжелая самописная распределенная база. И потому один запрос выполняется существенное время (около трети секунды). Но снова таки, это приложение не является критичным, хотя за неоправданную "тормознутось" операций будет как минимум "не ловко"
...
Рейтинг: 0 / 0
2 сообщений из 2, страница 1 из 1
Форумы / Java [игнор отключен] [закрыт для гостей] / single responsibility principle или DRY
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]