Open MtimurM2907 opened 1 week ago
1 файл Необходимо ввести интерфейс IMessageService и сделать так, чтобы Notification зависел от абстракции, а не от конкретной реализации. Нужно создавать классы, которые наследуются от интерфейса. Приведу пример: У тебя есть проект на 100500 различных классов и методов. И тут ты в одном моменте решаешь, что вот в этом месте у тебя метод, в этом классе должен принимать не int, а string. Из-за того что у тебя класс завязан на интерфейс ты сразу увидишь ошибку, пойдешь менять в интерфейсе, увидишь где еще у тебя в программе используется этот же метод, поправишь.
2 файл и "возможное решение" Если делать совсем по умному, без нарушения принципов. Нужно вынести рыбу в отдельный класс, который не будет переопределять метод MakeSound, или создать новый интерфейс для животных, которые не могут издавать звуки. throw new в данном контексте задания это корректное поведение, ты прокидываешь ошибку потому что рыбы не разговаривают, а не информируешь в консоли об ошибке. Ошибку можно обрабатывать в дальнейшем, запись в консоль ты не сможешь отловить. (Если вообще упороться и юзать потоки с cancellationToken то исключение тебе поможет вывести ошибку в лог, при этом не роняя весь сервис)
3 файл Каждый тип платежа должен быть отдельным классом, наследующим базовый класс PaymentMethod, и каждый класс должен иметь метод для обработки платежа. Таким образом, добавление нового способа оплаты не потребует изменения существующего кода.
Принципы определил верно
№1 Нарушен принцип инверсии зависимостей. Высокоуровневые модули не должны зависеть от низкоуровневых, а обе эти сущности должны зависеть от абстракций. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/FirstExample.cs#L3 №2 Нарушен принцип подстановки листков. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/SecondExample.cs#L3 Также в 21 строке программа ссылается на несуществующий метод. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/SecondExample.cs#L21 Возможное решение задачи:
№3 Неправильный нейминг. Класс PP можно назвать PaymentVerification. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/ThirdExample.cs#L3 https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/ThirdExample.cs#L5 https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/ThirdExample.cs#L21 Метод не должен называться как класс. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/ThirdExample.cs#L5 Нарушен принцип открытости/закрытости. То есть добавляя новые функциональности в систему, не нужно было бы изменять код. https://github.com/HukuTa45/HomeWork363/blob/a799518340267c6510e84def1ebcfcbfd0a98226/ConsoleApp1/ThirdExample.cs#L3