-
Notifications
You must be signed in to change notification settings - Fork 7
Рефакторинг ФабрикаЖелудей: выделение специализированных классов для разделения ответственностей #127
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Conversation
…ties Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Кажется, теперь логику этого метода можно вынести в класс ПриемкаДуб. Для этого может понадобиться часть новых классов сделать служебными желудями и поместить их в СлужебныйДубОсени. См конструктор класса Поделка
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Добавил новые специализированные классы как служебные желуди в СлужебныйДубОсени (commit 9b997db).
По поводу ПриемкаДуб: я исследовал этот подход, но столкнулся с проблемой времени инициализации. Классы приемки создаются во время добавления определений желудей, когда система еще инициализируется, и они могут получать только детальки (&Пластилин), но не полноценные зависимости.
Логика ДобавитьДуб требует доступа к ЧитательАннотаций и РепозиторийОпределенийЖелудей для создания определений завязей. Не могли бы вы подсказать, как лучше решить эту циклическую зависимость? Возможно, стоит изменить порядок инициализации или использовать другой паттерн?
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Я смотрел твои логи, ты неверно пытался внедрить Поделку в ПриемкаДуб. Осень использует имя переменной для определения внедряемой зависимости.
- Попробуй объявить поле Поделка, а в конструктор добавить &Пластилин("Поделка") пПоделка
- Если это не поможет, и все ещё будет ошибка о возможности внедрения только деталек, помоги мне с рефакторингом этого механизма. Сейчас валидация типов прилепляемых частиц содержится в конструкторе класса ОпределениеЖелудя. Я хочу разрешить внедрять жёлуди со спецификацией "Инициализация" в другие жёлуди этой же спецификации. Это может потребовать переноса логики валидации определений желудей в конец конструктора Поделки
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Создал ПриемкаДуб класс и перенес логику из ФабрикаЖелудей.ДобавитьДуб (commit aded8cf). Использовал подход с полем Поделка и &Пластилин("Поделка") в конструкторе, как вы предложили.
Изолированные тесты теперь проходят успешно, но остается проблема с циркулярными зависимостями - ПриемкаДуб не может получить служебные желуди типа ПрилепляторЧастиц из СлужебныйДубОсени во время инициализации.
Готов помочь с рефакторингом механизма валидации в конструкторе Поделки для разрешения внедрения желудей со спецификацией "Инициализация" друг в друга. Как лучше это реализовать?
Co-authored-by: nixel2007 <[email protected]>
Co-authored-by: nixel2007 <[email protected]>
Проблема
Класс
ФабрикаЖелудейбыл переусложнен и выполнял слишком много ответственностей:Это нарушало принцип единственной ответственности (Single Responsibility Principle) и затрудняло поддержку кода.
Решение
Выделены четыре специализированных класса для разделения ответственностей:
1. МенеджерНапильников
Управляет всеми аспектами работы с напильниками:
2. РепозиторийОпределенийЖелудей
Отвечает за хранение и поиск определений желудей:
3. ЧитательАннотаций
Специализируется на парсинге параметров из аннотаций:
4. ФабрикаЗавязей
Создает различные типы завязей:
Результаты
До рефакторинга:
После рефакторинга:
Преимущества
Диаграмма классов
Подробная диаграмма классов с визуализацией изменений доступна в
docs/refactoring/ФабрикаЖелудей-refactoring.md.Тестирование
Все 71 существующих теста проходят успешно, что подтверждает сохранение функциональности при улучшении архитектуры.
Fixes #124.
💬 Share your feedback on Copilot coding agent for the chance to win a $200 gift card! Click here to start the survey.