我对系统发送电子邮件的要求。当前,系统通过电子邮件发送用户的名字,并且该产品正在生产中并且可以正常工作。
现在我的客户要求在电子邮件中也添加姓氏,所以我扩展了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
}
}
`
内容创建不必是send方法的责任。就像发送任何传递给它的内容一样。因此,可以使用IEMailContent接口代替Email接口。该接口的实现应处理邮件内容准备。当内容需求发生变化时,可以对此进行扩展。打开扩展。
电子邮件的发送方法应以IEMailContent作为参数。然后,当内容需求更改时,就不需要更改。已关闭以进行修改。
send方法可以具有其他参数,例如主题,具有默认值的邮件ID列表,抄送CC邮件ID列表,密件抄送ID列表。然后,如果这些参数有任何要求更改,则无需修改Email类。