Означает ли открытый закрытый принцип, что мы должны определить каждый метод как виртуальный? - PullRequest
1 голос
/ 02 апреля 2019

Мне трудно понять идею открытого закрытого принципа.

Насколько я знаю, принцип говорит, что каждый класс должен быть закрыт для модификации и открыт для расширения.так?

Так что это означает, что мы должны сделать каждый метод в нашем классе виртуальным, чтобы мы могли расширять класс без необходимости его изменения.Это правильно?

1 Ответ

0 голосов
/ 03 мая 2019

Я думаю, вы несколько не понимаете, что влечет за собой принцип Открыто-Закрыто.

Принцип открытого-закрытого типа гласит, что программные объекты должны быть закрыты для модификации и открыты для расширения. Под программными объектами в этом контексте понимаются классы, методы структур и т. Д.

Основная идея заключается в том, что вашим организациям не нужно часто менять требования. Если появляются новые требования, ваши сущности должны быть расширены для соответствия новым функциям.

Предположим, у нас есть следующая функция:

    public List<Product> GetProducts(Criteria criteria)
    {
        return context.Where(x => x.criteria1 = criteria.criteria1)
            .Where(x => x.criteria2 = criteria.criteria2)
            .Where(x => x.criteria3 = criteria.criteria3)
            .Where(x => x.criteria4 = criteria.criteria4);
    }

Легко видеть, что, когда появляется другое требование критерия, это потребует изменения класса «ProductRepository» и его функций. Конечно, многие другие функции в этом классе, возможно, придется изменить, поскольку он также может использовать объекты критериев.

Предположим, что мы можем написать что-то вроде этого:

    private List<Product> GetProducts(Criteria criteria)
    {
        return cleverContext.Apply(criteria);
    }

Мы сразу получаем гибкость, когда только код, отвечающий за критерии, изменяется или расширяется.

Самым большим способом улучшения дизайна для удовлетворения принципу Open-Closed является использование расширенного домена. Когда ваш домен моделирует бизнес-правила предприятия, правила никогда не должны изменяться. Мы разделяем Домен с вариантами использования, чтобы иметь дело с правилами приложения.

Дядя Боб пишет больше об этом в своей чистой архитектуре.

Дайте мне знать, если есть что-то, на что я могу пролить свет, или попробуйте объяснить дальше:)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...