gpt4 book ai didi

c# - 设计题: How to deal with initialization?

转载 作者:太空宇宙 更新时间:2023-11-03 20:46:28 25 4
gpt4 key购买 nike

假设我们有一个将在 (c#) 代码中广泛使用的类,例如 Log 类。假设日志将条目写入特定目录中的 XML 文件。现在,强制用户使用所需信息初始化类的一种尝试是将默认(无参数)构造函数设为私有(private),并提供一个采用logdirectory 参数的构造函数。这样做的缺点是,用户每次需要将某些内容写入日志并因此创建 Log 类的实例时,都需要提供参数。

还有哪些其他选项可用?预先感谢您的回复。

最佳答案

四个选项(大部分都涵盖了,但没有明确地放在一起):

  • 只需将调用设为静态,并包括静态初始化。这对于(依赖于它的类的)测试来说很糟糕,但非常简单。

  • 使用 singleton正如大多数其他答案所建议的那样。从测试的角度来看,这可能更好(您可以使用内部方法来替换单例,仅用于测试目的),并实现一个用于模拟目的的接口(interface)。

  • 使用依赖注入(inject):让所有需要依赖的东西都在构造函数或其他任何东西中获取它,并让您的 DI 框架将所有东西连接起来。从测试的角度来看要好得多,但并不十分方便。

  • 使用工厂 - 类似于单例,但将实现与构建分开。 (它可能有效地最终成为一个单例,但没有那么多的假设。)

关于c# - 设计题: How to deal with initialization?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/677742/

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