Реализация принципа Open-Closed с частыми изменениями - PullRequest
0 голосов
/ 18 апреля 2020

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

Теперь мой клиент попросил добавить также фамилию в электронной почте, поэтому я расширил send (User userinfo) метод, и это тоже работает нормально.

Теперь клиент снова попросил добавить электронную почту в электронном письме, позже клиент снова попросил добавить мобильный телефон и так далее дополнительную информацию о пользователе в электронной почте.

Как управлять этим по принципу открытого-закрытого типа solid, в то время как клиент часто запрашивает изменения в той же функции? Код

` class User
    {
        public int userId { get; set; }
        public string FirstName { get; set; }
        public string LastName { get; set; }
        public string Email { get; set; }
        public string Mobile { get; set; }
    }

    interface Email
    {
        void send(User userInfo);
    }

    class UserEmail : Email
    {
        public void send(User userInfo)
        {
            // Sends users firstname
            //Email Send code 
        }
    }

    class NewUserEmail : Email
    {
        public void send(User userInfo)
        {
            // Sends users Lirstname + Lastname
            //Email Send code 
        }
    }
`

1 Ответ

0 голосов
/ 18 апреля 2020

Ответственность за создание контента не лежит на методе отправки. Это может быть как отправить любой контент, который передается на него. Таким образом, вместо интерфейса электронной почты вы можете использовать интерфейс IEMailContent. Реализация этого интерфейса должна обрабатывать почтовый контент. Это может быть расширено по мере изменения требований к контенту. Открыто для расширения.

Метод отправки Email должен иметь IEMailContent в качестве аргумента. Тогда это не потребует изменений при изменении требований к контенту. Закрыт для изменения.

метод отправки может иметь другие аргументы, такие как тема, список почтовых идентификаторов, cc список почтовых идентификаторов, b cc список идентификаторов со значениями по умолчанию. Затем, если какое-либо требование изменится в этих параметрах, класс Email не нужно изменять.

...