在编程领域,经常会遇到一些设计模式,它们帮助以更高效、更清晰的方式构建软件。然而,并非所有的设计模式都是有益的。本文将探讨两种特殊的设计模式:"天钩"(Skyhook)和"起重机"(Crane),并展示如何通过改进代码来避免使用天钩,转而使用起重机。
“天钩”是一种设计模式,它允许在不依赖于先前条件的情况下解释事物。相反,“起重机”则具有可解释的先前条件,可能是直到达到某个基本公理。在编程中,天钩通常表现为代码中的不良实践,如静态方法、单例模式、使用new关键字创建对象、扩展方法等。这些做法使得代码难以进行单元测试,因为它们阻碍了代码中模拟对象的注入。
“起重机”则是一种更优的设计模式,它通过依赖注入、控制反转和工厂模式等技术,使得代码更加灵活、可测试。起重机模式的核心思想是,代码的每个部分都应该明确其依赖关系,并通过外部注入这些依赖,而不是在内部硬编码。
让以一个C#代码示例开始,这个示例包含了四种天钩模式:
public class UsersModule : IModule
{
public void Initialize()
{
var unityContainer = ServiceLocator.Current.GetInstance();
unityContainer.RegisterType
在这个示例中,可以看到:
为了改进这段代码,可以采用起重机模式,通过依赖注入和控制反转来重构代码:
public class UsersModule : IModule
{
public UsersModule(IUnityContainer unityContainer, IRegionNameProvider regionNameProvider, IUserFactory userFactory)
{
this.unityContainer = unityContainer;
this.regionNameProvider = regionNameProvider;
this.userFactory = userFactory;
}
public void Initialize()
{
this.unityContainer.RegisterType