Как стать автором
Обновить

Комментарии 14

решение, которое первое приходит в голову

оно прекрасно

Извините, но вы написали код а потом притянули на него ваше понимание SOLID.
Накидают вам в комментах.

Не согласимся. Приведение кода в порядок в подобном формате соответствуют принципам Solid.

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

"В результате получилось, что нет того функционала, который бы не был востребован, есть только все самое нужное и актуальное."

- Вовсе нет.

GetConnection() используется внутри GetCalendar(). Делать его публичным нету смысла. Так как запросто можно его вызвать в открытую и не закрыть Connection. Второе, а что делать, если у каждого клиента поменялся Connection? Нужен способ задавать ConnectionStrings, по которым DbWorker-ы подключаются к базе. Для этого необходимо определить интерфейс настройки Worker-а (какой-нибудь IWorkerManager).

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

По итогу - лёгкий код превратили в сложный

Настолько утрированы, что Worker занимается не только подключением и выполнением запроса к базе, но и чтением РЕЗУЛЬТАТА, извлечением и преобразованием данных. Сразу нарушение Single Responsibility. Потому что название лишь говорит о том, что она работает с базой, и всё. Возможно, нам, например, захочется тестировать преобразование данных (формат дат из одной культуры в другую, к примеру из 23.10.2022 в 2022/10/23). И нам не потребуется работать с базой. Но у нас кроме workers пока ничего нет. Или мы получаем данные в виде JSON из базы. Worker-у не надо знать JSON, CSS, CSV и другие форматы лишь чтобы вернуть корректный результат. Он лишь возвращает ответ из базы и всё. А приведение ответа из базы к адекватному формату - другая сущность.

Знаете, я много раз замечал: если человек неграмотен, то он неграмотен во всём примерно одинаково.

Если вы постоянно пишете holydays и emplyee, то ждать грамотного подхода от всей статьи не приходится. Так и вышло: (N+1)-я попытка разжевать SOLID вышла слегка неграмотной.

В целом ничего страшного, мы уже привыкли, из предыдущих N статей на ту же тему нормальных было, наверное, одна или две..

Хорошая статья. Хорошо показывает, зачем и как можно использовать принципы SOLID. Эти принципы просты только для тех, кто из уже хорошо понимает и/или хорошо подкован в программировании вообще и архитектуре в частности, а для джунов эти принципы сложны, как раз из-за недостатка опыта сложно увидеть грабли. Статья на хорошем примере показывает, что бывает без этих принципов.

Понятно, что в статье пришлось убрать некоторые вещи, на которые указали в комментах. Если это всё это сделать, то статья станет в три раза больше и в десять раз сложнее, и не поможет джунам понять принципы.

Допустим у нас SOLID. Все хорошо? Не факт, но неплохо.

Допустим у нас дикий треш, как его довести до ума? Вероятно переписать все напрочь. Статья про это же?

Я извиняюсь, но тут вступает принцип Kiss. Написать скрипт который берет записи не старше суток и закинул в крон на нужное время и дни.

Создание новых абстракций решает все проблемы кроме проблемы слишком большого количества абстракций.

Это точно... Оверинжиниринг тоже такое себе...

Зарегистрируйтесь на Хабре, чтобы оставить комментарий