HukuTa45 / HomeWork363

0 stars 0 forks source link

Муртазин 363 #18

Open MtimurM2907 opened 1 week ago

MtimurM2907 commented 1 week ago

№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 Возможное решение задачи:

namespace ConsoleApp21 
{
    public abstract class Animal
    {
        public abstract void MakeSound();
    }

    public class Dog : Animal
    {
        public override void MakeSound()
        {
            Console.WriteLine("Woof");
        }
    }

    public class Cat : Animal
    {
        public override void MakeSound()
        {
            Console.WriteLine("Meow");
        }
    }

    public class Fish : Animal
    {
        public override void MakeSound()
        {
            throw new InvalidOperationException("Fish cannot make sound");
        }
    }
}

№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

HukuTa45 commented 1 week ago

1 файл Необходимо ввести интерфейс IMessageService и сделать так, чтобы Notification зависел от абстракции, а не от конкретной реализации. Нужно создавать классы, которые наследуются от интерфейса. Приведу пример: У тебя есть проект на 100500 различных классов и методов. И тут ты в одном моменте решаешь, что вот в этом месте у тебя метод, в этом классе должен принимать не int, а string. Из-за того что у тебя класс завязан на интерфейс ты сразу увидишь ошибку, пойдешь менять в интерфейсе, увидишь где еще у тебя в программе используется этот же метод, поправишь.

2 файл и "возможное решение" Если делать совсем по умному, без нарушения принципов. Нужно вынести рыбу в отдельный класс, который не будет переопределять метод MakeSound, или создать новый интерфейс для животных, которые не могут издавать звуки. throw new в данном контексте задания это корректное поведение, ты прокидываешь ошибку потому что рыбы не разговаривают, а не информируешь в консоли об ошибке. Ошибку можно обрабатывать в дальнейшем, запись в консоль ты не сможешь отловить. (Если вообще упороться и юзать потоки с cancellationToken то исключение тебе поможет вывести ошибку в лог, при этом не роняя весь сервис)

3 файл Каждый тип платежа должен быть отдельным классом, наследующим базовый класс PaymentMethod, и каждый класс должен иметь метод для обработки платежа. Таким образом, добавление нового способа оплаты не потребует изменения существующего кода.

Принципы определил верно