频繁更改的开闭原理的实现

问题描述 投票:0回答:1

我对系统发送电子邮件的要求。当前,系统通过电子邮件发送用户的名字,并且该产品正在生产中并且可以正常工作。

现在我的客户要求在电子邮件中也添加姓氏,所以我扩展了send(User userinfo)方法,这也可以正常工作。

现在客户端再次要求在电子邮件中添加电子邮件,稍后客户端再次要求在电子邮件中添加移动设备等更多用户信息。

当客户经常要求对同一功能进行更改时,如何使用实心原则的开闭原则来管理此问题?代码

` 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 
        }
    }
`
c# solid-principles open-closed-principle
1个回答
0
投票

内容创建不必是send方法的责任。就像发送任何传递给它的内容一样。因此,可以使用IEMailContent接口代替Email接口。该接口的实现应处理邮件内容准备。当内容需求发生变化时,可以对此进行扩展。打开扩展。

电子邮件的发送方法应以IEMailContent作为参数。然后,当内容需求更改时,就不需要更改。已关闭以进行修改。

send方法可以具有其他参数,例如主题,具有默认值的邮件ID列表,抄送CC邮件ID列表,密件抄送ID列表。然后,如果这些参数有任何要求更改,则无需修改Email类。

© www.soinside.com 2019 - 2024. All rights reserved.