Castle.Windsor官网API外文翻译(一)---基本概念

1、IoC(Inversion of Control)

        IoC就是IoC,不是什么技术,与GoF一样,是一种设计模式。

       这和开发者直接调用API代码是相反的,因此,框架反转控制,也就是说对象的创建是由框架自己在某种时候创建。

        也许你在哪里已经应用了上面的原则,知识你还没有意识到这一点。

2、Inversion of Control Container

        人们常常认为Inversion of Control(控制反转)和Inversion of Control Container所表达的意思是差不多的,事实上Inversion of Control是一个更广义的概念。

         人们常说的“注入”是容器控制反转的最主要的用法,这大大的降低了系统的耦合度,简化了重用性和可测试性。

3、Services, Components and Dependencies(服务、组件、依赖)

        有一张很好的图形容:

       Castle.Windsor官网API外文翻译(一)---基本概念

        (1)services通常是一个抽象的概念,就像你去咖啡店想要一杯咖啡的服务,你不用关心咖啡豆的大小,用的什么机器。因此

你经常会发现您的服务将被定义为接口,接口是通过定义抽象的和有没有实现的。

public interface ICoffeeShop
{
   Future<Coffee> GetCoffee(CoffeeRequest request);
}

        (2)Component与服务是有关的,服务是一个抽象的概念,他是不会给你咖啡的,而我们在一个真实的世界中,因此你需要到一个实际的咖啡店中完成这项服务。在C#中通常是指实现服务的类。

public class Starbucks: ICoffeeShop
{
   public Future<Coffee> GetCoffee(CoffeeRequest request)
   {
      // some implementation
   }
}

        我们要记住正如城里可以有很多家咖啡店,一个服务可以被很多组件实现(就像一家是星巴克,一家是CofeeClub)。

        一家咖啡店还以同时卖面包和烤肠,一个组件可以实现多个服务。

        (3)Dependency

        组件是为了实现服务而存在的,就像一家咖啡店依赖于一些公共服务(电力),还有其供应商提供的豆子和牛奶,所以组件要做的事情最终还是要委派与一些非本质的方面。

        现在我要重复一件很明显的事情,那就是组件要依赖于其他服务的组件,这样就可以很好的解耦你的咖啡店和牛奶送货员是如何操作的。

        你的组件除了可能依赖于其他服务的组件,还可能依赖于一些 connectionStrings和一些属性配置等等。

        在C#中依赖通常是通过构造函数和属性注入的,在一些高级的场景,组件和你执行的类没有关系。

4、Putting it all together

        我们把他们放在一起,就是一个高效容器的特点,小组件,定义良好,实现少,抽象服务,依赖于其他组件以及一些配置文件,执行一些服务的规约。

        你最终会得到很多小的,解耦的组件,这将允许你快速的改变和完善在一些特殊需求情况下。缺点就是你会有很多组件和依赖需要管理。

        这就是容器的工作内容。


不断完善中,敬请期待!


你可能感兴趣的:(dependencies,Services,Components)