gpt4 book ai didi

c# - .NET Framework 类的依赖倒置原则

转载 作者:太空狗 更新时间:2023-10-29 19:38:27 24 4
gpt4 key购买 nike

我正在尝试理解 SOLID 原则,尤其是依赖倒置原则

这是SO answer解释得很好。

我想我已经明白我不能在我的类中创建类的任何实例。对吗?

但是如果我必须将一些内容保存到磁盘,我可以创建一个 System.IO.File 的实例吗?还是必须注入(inject)?

我不明白限制在哪里,如果我不能实例化我自己的类,或者我不能实例化 .NET Framework 类(或任何其他框架)。

更新:
我认为 File 是一个不好的例子,因为它被声明为静态的。

顺便问一下,这个原则是否适用于静态类

最佳答案

SOLID 的 S 代表 SRP(Single Responsibility Principle)。一旦您让该类承担单一责任,您就不会通过直接在类中使用 System.IO.File 来违反它。

尝试抽象出使用 System.IO.File 的目的是个好主意。假设您需要它来生成日志。那么你可能会做这样的事情:

public interface IMyLogger
{
void GenerateLog(IEnumerable<string> content);
}

public class FileLogger: IMyLogger
{
public void GenerateLog(IEnumerable<string> content)
{
System.IO.File.WriteAllLines("C:/Log", content);
}
}

也许它不仅仅是一个日志,它是更重要的东西,比如生成一个文件以便其他系统/应用程序(甚至外部)读取它并做一些工作。

如果您尝试使用 DDD 方法,接口(interface)可能属于您的领域,而实现可能属于应用程序。然后将您的界面注册为服务并注入(inject)它。

需要 IMyLogger 的类实际上不需要知道日志是如何生成的,它只需要完成工作即可。

当您需要在域中的某些业务逻辑中发送电子邮件时,您可以应用相同的想法。不要直接连接到域内的 Exchange,而是创建一个接口(interface) INotifier 和一个实现它的 MailNotifier 以注入(inject)。

关于c# - .NET Framework 类的依赖倒置原则,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45213060/

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