我想知道,设计具有特定意图的界面的最佳做法是什么? 例如,假设我想实现一个接口,将对象标记为可通过电子邮件发送,IEmailable。最好在ConvertToEmail()的接口上只有一个方法,它将返回一个类型为Email的对象,主题为& body设置,或者更好的是具有Address,Body,Subject的接口属性,因此使用该接口处理对象的方法可以操作&按照自己的意愿创建电子邮件?
答案 0 :(得分:0)
将电子邮件功能拆分为自己的界面和类可能是值得的,例如
public interface IEmailConverter<T>
{
Email ConvertToEmail(T source)
}
我会留下地址和主题。原因是
更进一步 - 如果您将对象格式化为电子邮件,然后发现您想要做的不仅仅是通过电子邮件发送,该怎么办?也许将对象格式化为文本应该是它自己的责任,比如
public interface ITextFormatter<T>
{
string ConvertToText(T source)
}
然后其他步骤 - 添加主题,地址,其他文本等 - 将更加可重用。只有与对象本身相关的部分 - 将其值提取到文本消息中 - 才属于新类。
甚至有一种默认实现在某些情况下可能会起作用(取决于您的类的外观以及覆盖ToString
是否有意义。)
public class TextFormatter<T> : ITextFormatter<T>
{
public virtual string ConvertToText(T source)
{
return source.ToString();
}
}
然后您可以根据需要创建替代实现,例如
public class FooPlainTextFormatter : ITextFormatter<Foo>
public class FooHtmlFormatter : IHtmlFormatter<Foo>