如何处理不稳定的第三方对象树(对不起,我不能拿出更好的标题)?

时间:2009-07-09 06:22:49

标签: c# .net design-patterns

假设我必须使用不能折射的不稳定组件。我的代码应该是CustomerCollection的客户端,它是(惊讶)Customer个实例的集合。每个客户实例都有更多属性,例如Order个实例的集合。我希望你明白这一点。

由于程序集行为不太好,我的方法是将每个类包装在façade中,在那里我可以处理异常和变通方法。 (为了使事情变得更复杂,我喜欢设计包装器以便与WPF一起使用数据绑定。)

所以我的问题是关于包装器的设计,例如CustomerCollectionFacade。如何公开对象树(客户,订单,订单属性)? CustomerWrapper集合是存储在字段中还是我即时创建CustomerWrapper个实例(可能在属性的get访问器中)?

欢迎任何想法。谢谢!

修改
不幸的是,krosenvold提出的方式不是我的选择。由于对象树的行为非常具有交互性(从多个视图进行编辑,如果属性发生变化则触发事件)我不会选择放弃“源对象”。这些更改应该传播到源。不管怎样,谢谢。

1 个答案:

答案 0 :(得分:0)

我通常会尝试将这些转换分离为一个或多个适配器类,让它们一次完成整个故事。这是一个神的想法,因为它很容易测试,所有的转换逻辑都在一个地方结束,你可以避免乱丢转换逻辑“到处都是”。

有时在/更新对象时,底层(源)对象中会出现状态。您可能没有在清理过的api中公开这些数据,所以它必须隐藏在某个地方。

如果您选择封装原始对象,那么将来有可能会有人破坏该封装,并开始泄漏底层对象的血腥细节。仅仅这个原因通常足以让我不能保留对原始实例的引用,因为我实际上已经理解了六个月后当我匆忙时我正在做什么。但是如果你将它保存在其他地方你就需要对原件进行生命周期管理,所以我通常最终将它藏在“干净”对象的某个秘密界面上。