【发布时间】:2011-12-07 16:54:30
【问题描述】:
我有一个只有接口和基本对象的库,我们称之为 API。 API 有一些已知的实现,它们的数量可能会根据应用程序的需要而增加。应用程序一次只能使用一种实现。我有另一个库,我们称之为 PROXY,它提供 API 库的基本实现,并将逻辑委托给 API 的实际实现。真正的实现由配置提供,PROXY 库负责创建适当的真实类并包装它们。这个想法是在我的代码中使用 API 和 PROXY 库,这样我就可以在不重新编译应用程序的情况下更改实现 - 只需更改配置并在类路径中提供真正的实现库。这是 C# 中的示例代码:
API:
public interface IFoo
{
void Bar();
}
代理:
public class Foo : IFoo
{
private IFoo _realFoo;
public Foo()
{
_realFoo = ...; // Assume reading the config and creating the real implementation with reflection here.
}
void Bar()
{
_realFoo.Bar();
}
}
实际实现:
public class RealFoo : IFoo
{
void Bar()
{
// Some specific logic
}
}
我猜上面的 Foo 类使用Decorator Pattern 来包裹真正的实现。如果整个方法有一个特定的名称,我会更感兴趣?
【问题讨论】:
-
名字里有什么?
-
这将帮助我为我将编写的库命名一个合理的名称,我在这里称之为 PROXY,并将帮助我更好地解释我的想法。
-
也可以根据使用情况来命名。如果 PROXY 是为了测试而创建的,您可以将其称为测试替身或假实现。
-
我的目的是在生产项目中使用它作为更新的一部分。作为客户部署和批准的项目,我不能使用 DI 和其他东西,并且不是为使用 DI 而设计的。我需要一些组件更容易维护,所以我打算使用这里描述的方法。每次更新一个组件,我只替换组件库和更改配置,而不重新部署整个应用程序。幸运的是,可以不费吹灰之力地隔离 API,这是一种更易于维护的潜在投资。
标签: design-patterns