gpt4 book ai didi

c# - 依赖注入(inject) : What should be injected where?

转载 作者:太空宇宙 更新时间:2023-11-03 14:14:29 26 4
gpt4 key购买 nike

我有许多类包含写入 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()?这感觉会更正确,但同样,如何将其付诸实践。

所以,简而言之,我的问题是:

  • 类(class)是否应该“注入(inject)”作家?
  • 一些作家是否应该“注入(inject)”这些类(class)?
  • 坚持当前的设置,但改为创建某种形式的界面?

欢迎任何建议。

最佳答案

您可以编写符合接口(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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com