是一个代理类,与类包装器相同

本文关键字:包装 代理 一个 | 更新日期: 2023-09-27 18:02:22

我必须访问一个遗留数据库,其中有"通用"表,我没有权限更改它。根据我正在处理的客户数据,表之间的关系可能不同。因此,customerA可以仅通过其客户号连接到订单表,而CustomerB可以通过客户号和日期连接到订单表。CustomerC可以不连接到订单表,而是连接到另一个表。

我想做的是为CustomerA创建一个对象图,为CustomerB创建一个对象图,为CustomerC创建一个对象图。我考虑过为每个类创建一个包装器类,但一直在研究代理。也就是说,编写的关于代理类的示例使它们看起来与包装器类相同。因此我的问题是,代理类是包装类的同义词吗?

谢谢。

是一个代理类,与类包装器相同

不,它们不一样。请查看维基百科上的代理模式和包装器模式。

基本上,代理是一个看起来与原始对象相同的对象(即实现相同的接口),但做更多的事情。

包装器是一个看起来与原始对象不同,但通常功能相同的对象。

有几种方法可以处理手头的问题。

一个是映射到公共域模型。如果您有相同的基本行为,但可能无法很好地为您提供细节(不同类型的客户端使用不同的键),则此方法可以正常工作。

另一种方法是将公共位移到基类中,然后继承状态中的不同细节(不同的属性)或不同的行为(仅主键id等)。考虑到这是不同的行为和状态,这是一个您可以使用的方向。

现在,模式。在代理模式中,新对象可以提供另一个对象的一些行为和状态,但不是对象。把它想象成一个人投票给你作为代理意味着什么,然后把它与软件联系起来。我不会认为它是一个包装器,因为包装器通常用于呈现与底层对象不同的面孔。这可能是由于需要在底层对象中隐藏某些内容或在对象之上添加进一步的行为。代理模式不能帮助处理不同的键;可以使用包装器,尽管我不认为这是最简单的方法。

来自维基百科:"代理,在其最一般的形式,是一个类的功能作为接口到其他东西"

ProxyPattern

Proxy:是一个"接口",如果你喜欢的话,它是一个"黑盒子",你从它请求一些东西,它会给你你想要的。

Wrapper:是一个实体,它基本上通过封装隐藏了一个功能,所以在它里面隐藏了一个"真正的"组件/另一个类/…通过向调用者公开其自己的方法,因此包装器的用户不知道它真正用于的对象。

希望这对你有帮助。

问候。

看一下代理和包装器类的实现可能非常相似。然而,这些术语经常在不同的会议中使用。

代理是一个行为像真实对象,但不是真实对象的对象。相反,它将所有调用转发给实际对象,从而隐藏了访问远程对象的复杂性。代理对象的一个例子是由Visual Studio生成的WCF客户端。客户端调用它们,就好像它们是真正的服务代码一样,代理处理通信。

包装器是由于某种原因隐藏另一个对象的对象。通常这是在接口不兼容的情况下进行的。一个具有正确功能但接口错误的对象被封装在另一个翻译接口的对象中。