- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有许多类包含写入 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”或类似的方式向我的所有类添加另一种方法。
嗯,这感觉好像有点不对劲。我正在考虑以相反的方式做事,并将类的实例传递给不同的文件编写器对象,但不确定这是否是正确的做法,甚至不确定如何最好地完成它。
也许我可以传入一个接口(interface)并调用Write()
?这感觉会更正确,但同样,如何将其付诸实践。
所以,简而言之,我的问题是:
欢迎任何建议。
最佳答案
您可以编写符合接口(interface)的“编写器”并注入(inject)编写器。然而,这意味着给定对象只能在任何单一状态下写入单一格式。这对您来说可能不是问题,如果不是,这就是一种实用的方法。
另一种选择是创建符合接口(interface)的编写器,但将对象排除在编写自己的业务之外。相反,一些调用者可以设置编写器并将对象传递给它。这涉及到我刚刚回答的一个问题:
Should classes be able to save and load themselves via XML?
在您的情况下,希望写出的调用者可以通过一些能够解析要使用的正确编写器的工厂来获取“编写器”。
我不会坚持您当前的设置,因为正如您提到的,每次需要一种新格式时,您都需要修改现有代码并为该格式添加方法。此外,您是在告诉您的对象他们应该知道如何做太多事情。
关于c# - 依赖注入(inject) : What should be injected where?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6917648/
我是一名优秀的程序员,十分优秀!