gpt4 book ai didi

c# - Solid Principle 的例子在哪里?

转载 作者:可可西里 更新时间:2023-11-01 07:52:53 26 4
gpt4 key购买 nike

我们都用一些模式编写代码,即使我们没有意识到。我试图真正理解一些 S.O.L.I.D 原则,以及您如何在现实世界中应用这些原则。

我正在为“D”而苦苦挣扎。

我有时会混淆依赖倒置依赖注入(inject)。这是否意味着只要你让事情依赖于抽象(IE:接口(interface))你就完成了。

有没有人有一个小的 C# 示例来解释它?

谢谢。

最佳答案

看看 Mark Seeman 的博客,或者买他的书更好。它涵盖的不仅仅是 DI。我很感激您可能只想要一个简单的示例。然而,许多自称了解的人其实并不了解这一主题,因此值得好好学习。

也就是说,这是一个非常简单的例子。据我了解,术语是控制反转依赖注入(inject)。控制反转是指将一个类的依赖项的控制权交给其他类,而不是类控制依赖项本身,通常通过 new 关键字。这种控制是通过依赖注入(inject)来实现的,其中一个类被赋予或注入(inject)了它的依赖。这可以通过 IoC 框架或代码(称为 Pure DI )完成。注入(inject)可以在类的构造函数中执行,通过属性或作为方法的参数。依赖关系可以是任何类型,它们不必是抽象的。

这是一个列出未使用兴奋剂的环法自行车赛冠军的类(class):

class CleanRiders
{
List<Rider> GetCleanRiders()
{
var riderRepository = new MsSqlRiderRepository();

return riderRepository.GetRiders.Where(x => x.Doping == false);
}
}

此类依赖于 MsSqlRiderRepository。该类控制实例的创建。问题是这种依赖性是不灵活的。很难将其更改为 OracleRiderRepositoryTestRiderRepository

IoC 和 DI 为我们解决了这个问题:

class CleanRiders
{
private IRiderRepository _repository;

public CleanRiders(IRiderRepository repository)
{
_repository = repository;
}

List<Rider> GetCleanRiders()
{
return _repository.GetRiders.Where(x => x.Doping == false);
}
}

现在这个类只依赖于一个接口(interface)。对依赖项的控制已交给类的创建者,并且必须通过其构造函数注入(inject):

void Main()
{
var c = new CleanRiders(new MsSqlRepository());

var riders = c.GetRiders();
}

可以说,这是一种更灵活、可测试且可靠的方法。

关于c# - Solid Principle 的例子在哪里?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13108222/

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