依赖注入:应该在哪里注入什么
本文关键字:注入 在哪里 什么 依赖 | 更新日期: 2023-09-27 18:04:12
我有许多类,它们包含写入CSV或XML文件的能力。为此,我将StreamWriter或XmlWriter的实例传递给ToCsv或ToXml方法。
public class HandFeed : JobItem
{
// Snip
public override void ToCsv(StreamWriter writer)
{
if (writer != null)
{
writer.WriteLine(JobItemsStrings.Job_HandFeed);
writer.WriteLine(JobItemsStrings.Job_Total + SEPARATOR_CHAR + this.Total.ToString());
}
}
public override void ToXml(XmlWriter writer)
{
if (writer != null)
{
writer.WriteStartElement("handfeed");
writer.WriteElementString("total", this.Total.ToString());
writer.WriteEndElement();
}
}
}
现在我也希望提供对JSON的支持,如果我以同样的方式继续,这将意味着在我所有的类中添加另一个方法,沿着'ToJson'或类似的行。
好吧,这感觉好像是错误的。我想也许做事情的另一种方式和传递类的实例到不同的文件写入器对象,而不是真的不确定这将是正确的事情去做,或者甚至如何最好地完成它。
也许我可以传入一个接口并调用Write()
?这个感觉更正确,但是,再一次,如何将其付诸实践。
所以,我的问题简单地说就是:
- 应该给类"注入"写器吗?应该给一些编写者"注入"这些类吗?坚持当前的设置,但创建某种形式的界面代替?
欢迎指教
您可以编写符合接口的" writer "并注入writer。然而,这意味着给定的对象只能在任何单一状态下被写入单一格式。这对您来说可能不是问题,如果不是,这是一个实用的方法。
另一种选择是创建符合接口的写入器,但不让对象自己写出来。相反,一些调用者可以设置写入器并将对象传递给它。这与我刚才回答的一个问题有关:
类应该能够保存和加载自己通过XML?
在你的例子中,希望写出来的调用者可以通过一些能够解析正确使用的写器的工厂获得"写器"。
我不会坚持当前的设置,因为正如您提到的,每次需要新格式时,您都需要修改现有代码并为该格式添加方法。而且,你在告诉你的对象他们应该知道如何做太多。
我认为你需要应用服务设计模式,你可以在这个链接上阅读它