在设计类时,最好强制实现者通过使其成为方法签名的一部分来传递所有必需参数,或者创建重载并允许用户设置属性,然后检查它们是否设置正确?
例如,假设我们有一个类Emailer
,其方法为Send
。发送要求
public bool Send(string ToAddress, string FromAddress, string subject, string body, string Attachment = null)
我也有公共属性
public string To { get; set; }
public string From { get; set; }
/// <summary>
/// Full filepath to attachment
/// </summary>
public string Attachment { get; set; }
public string Subject {get;set;}
public string Body {get;set;}
现在,我应该为Send
创建一个重载吗?
public void Send()
然后写入未填充属性的检查。或者,忽略过载并可能删除属性?
答案 0 :(得分:10)
通过持有这些属性,我觉得你的Emailer
有太多的责任。也许你应该考虑将它分成Message
类,然后你可以传递它。
看看.NET邮件类的工作方式。
答案 1 :(得分:1)
我需要任何需要的东西作为参数,以使其更难搞乱...如果你把它作为一个属性,它很容易错过必填字段。此外,需要某些字段作为参数,这使得您非常明确地需要这些字段。
@Daniel A.怀特已经建议使用Message类来区分您的问题(邮件程序与邮件)。我会接受一个Message对象,该对象又需要构造函数中所需的数据(To和From的最小值)。
当然,这是假设您仅使用电子邮件作为示例。在现实生活中,你会使用内置类:)