Oop 设计模式关注
我发现了一些非常类似于设计模式的东西。我正在做的是创建一个注入到多类中的实例。到目前为止,它是一个DI,但区别在于一个实例被送入多个依赖类:Oop 设计模式关注,oop,design-patterns,Oop,Design Patterns,我发现了一些非常类似于设计模式的东西。我正在做的是创建一个注入到多类中的实例。到目前为止,它是一个DI,但区别在于一个实例被送入多个依赖类: var instance = new ClassA(); var dep1 = new DependentFoo(instance); var dep2 = new DependentBar(instance); 目前,我发现它适用于两种示例情况: 使用多个GUI模块生成模块化代码时。我将当前工作数据的实例馈送到不同的依赖类中,因此,例如,当单击“新文
var instance = new ClassA();
var dep1 = new DependentFoo(instance);
var dep2 = new DependentBar(instance);
目前,我发现它适用于两种示例情况:
我可能会对此进行详细阐述,但我的问题是:这是一个命名模式吗?我知道DI的工作原理是将依赖项放入类中。但在我的例子中,它更进一步——将该实例用于多个依赖类。它被称为对象组合,本身不是一种“设计模式”,而是一种结构化代码的方法,因此可以减少重复。那些完全相信你所做的事情的人阐述了固体和干燥的原理。如果你身处OO世界,这些都是好事。(如果你身处一个FP世界,它们也是一个很好的哲学,尽管DI有时会受到反对。)它被称为对象组合,本身不是一种“设计模式”,而是一种结构化代码的方式,因此你可以减少重复。那些完全相信你所做的事情的人阐述了固体和干燥的原理。如果你身处OO世界,这些都是好事。(如果你身处一个FP世界,它们也是一个很好的哲学,尽管DI有时是不受欢迎的。)您可能想查看Observer模式或MVC模式,因为它们似乎是您的目标。您可能想查看Observer模式或MVC模式,因为它们似乎是您的目标。这不是一个特定的模式,好吧。通过DI提供共享资源只是一种方法或技术。国际奥委会框架会称之为“生活方式”管理。这不是一种特定的模式,阿法克。通过DI提供共享资源只是一种方法或技术。IoC框架将这种管理称为“生活方式”管理。现代IoC容器知道如何处理它 它被称为
Container.Register(Component.For<MyScopedComponent>().LifestyleScoped())
Container.Register(Component.For().LifestyleScoped())
用法:
using Castle.MicroKernel.Lifestyle;
using (Container.BeginScope()) //extension method
{
var one = Container.Resolve<MyScopedComponent>();
var two = Container.Resolve<MyScopedComponent>();
Assert.AreSame(one, two);
} // releases the instance
使用Castle.MicroKernel.lifety;
使用(Container.BeginScope())//扩展方法
{
var one=Container.Resolve();
var two=Container.Resolve();
Assert.AreName(一,二);
}//释放实例
用于确保解析的实体在特定根/图中相同 现代IoC容器知道如何处理它 它被称为
Container.Register(Component.For<MyScopedComponent>().LifestyleScoped())
Container.Register(Component.For().LifestyleScoped())
用法:
using Castle.MicroKernel.Lifestyle;
using (Container.BeginScope()) //extension method
{
var one = Container.Resolve<MyScopedComponent>();
var two = Container.Resolve<MyScopedComponent>();
Assert.AreSame(one, two);
} // releases the instance
使用Castle.MicroKernel.lifety;
使用(Container.BeginScope())//扩展方法
{
var one=Container.Resolve();
var two=Container.Resolve();
Assert.AreName(一,二);
}//释放实例
用于确保解析的实体在特定根/图中相同 DI也是一种对象组合,也许我不应该把DI称为一种设计模式?顺便说一句:DI是不受欢迎的,因为人们试图用它来做任何事情,或者将单元测试置于程序核心功能之上。我也反对这种说法——单元测试永远不会解决任何实际问题。@lukasz1985单元测试将解决许多实际问题。事实上,单元测试一直在解决实际问题,特别是那些坐在键盘和椅子之间的问题,或者至少证明代码本身不是问题。实际问题是由核心程序功能解决的问题。剩下的就是你说的程序员。如果程序员没有足够的智慧来找出他做错了什么,也没有完全理解他正在创建的底层系统,那么单元测试将永远不会有足够的帮助。只有当你真正关心真实生活的过程时,编程才能给你带来理解真实生活过程的乐趣。测试是好的——证明某些东西在工作。他们不能证明其他任何东西。DI也是一种对象组合,也许我不应该把DI称为设计模式?顺便说一句:DI是不受欢迎的,因为人们试图用它来做任何事情,或者将单元测试置于程序核心功能之上。我也反对这种说法——单元测试永远不会解决任何实际问题。@lukasz1985单元测试将解决许多实际问题。事实上,单元测试一直在解决实际问题,特别是那些坐在键盘和椅子之间的问题,或者至少证明代码本身不是问题。实际问题是由核心程序功能解决的问题。剩下的就是你说的程序员。如果程序员没有足够的智慧来找出他做错了什么,也没有完全理解他正在创建的底层系统,那么单元测试将永远不会有足够的帮助。只有当你真正关心真实生活的过程时,编程才能给你带来理解真实生活过程的乐趣。测试是好的——证明某些东西在工作。他们不能证明其他任何东西。这与MVC有一些相似之处,是的,特别是如果把我的例子中的“dep1”和“dep2”看作控制器,“instance”看作“model”。哟