1) Задание:
Проведите рефакторинг - https://gist.github.com/HolyMonkey/adcf9478bd6dcdd21384bf269155f8fe
Решение:
В основной обработчик нажатия кнопки вынес высокоуровневые функции в декларативном стиле, чтобы было легче понимать логику кода.
На уровне ниже функции обработки данных введённых пользователем и вывод результата.
https://gist.github.com/NoNameDeleted/fb6ca90f51c76888eb00d27b0aa99da1
Ответ ментора:
Здравствуйте. Это задача на паттерн MVP.
Общая схема примерно такая.
Каждый из слоев может состоять более чем из одного класса. SRP никто не отменял)
В целом, будут классы (можно их назвать иначе) View, Prespenter, PresenterFactory, Service, DatabaseContext, Repository, Citizen, Паспорт.
View - использует MessageBox.Show, устанавливает результат строки и вызывает по нажатию кнопки метод презентера.
Презентер - обращается к модели, получает от нее какие то данные (или не получает) и принимает решение как на эти данные отреагировать (что отобразить во View). Создает паспорт и обрабатывает эксепшены.
Service (модель) - Прослойка между БД и презентером, получает от паспорта его номер, вызывает кого то, кто посчитает хэш, передает хэш в Repository.
Repository- обрабатывает DataTable, полученный от DatabaseContext, создает Citizen.
DatabaseContext- открывает соединение, создает DataTable, заполняет его и возвращает.
Пишите программу начиная с метода Main, чтоб был понятен полный поток выполнения программы. Что от куда берется тд.
Не обязательно работать в вин формс, можно консольное приложение, главное сохранить суть.
2) Задание:
Попробуйте заменить метод на пару Включить\Выключить - https://gist.github.com/HolyMonkey/ef0c234f158151d80ecb22d3717c9ac2
Решение:
https://gist.github.com/NoNameDeleted/69b0c032940109d8a28f980e34c2d746
Ответ ментора:
Disable - не хватает действия которое бы оправдало имя метода.
3) Задание:
Отрефакторите - https://gist.github.com/HolyMonkey/1bad5877fc09bb60d2a83a522824440e
Решение:
https://gist.github.com/NoNameDeleted/a0fcff5d1ba50a1e6d17838cff7fa96e
Ответ ментора:
public void Shoot(Player player) {} - стреляем обычно в цель.
public string Find(int index) {} - Поиск предполагает перебор и сравнение по какому-то критерию, а тут мы ничего не ищем, у нас уже есть индекс.