假设我必须使用不能折射的不稳定组件。我的代码应该是CustomerCollection
的客户端,它是(惊讶)Customer
个实例的集合。每个客户实例都有更多属性,例如Order
个实例的集合。我希望你明白这一点。
由于程序集行为不太好,我的方法是将每个类包装在façade中,在那里我可以处理异常和变通方法。 (为了使事情变得更复杂,我喜欢设计包装器以便与WPF一起使用数据绑定。)
所以我的问题是关于包装器的设计,例如CustomerCollectionFacade
。如何公开对象树(客户,订单,订单属性)? CustomerWrapper
集合是存储在字段中还是我即时创建CustomerWrapper
个实例(可能在属性的get访问器中)?
欢迎任何想法。谢谢!
修改
不幸的是,krosenvold提出的方式不是我的选择。由于对象树的行为非常具有交互性(从多个视图进行编辑,如果属性发生变化则触发事件)我不会选择放弃“源对象”。这些更改应该传播到源。不管怎样,谢谢。
答案 0 :(得分:0)
我通常会尝试将这些转换分离为一个或多个适配器类,让它们一次完成整个故事。这是一个神的想法,因为它很容易测试,所有的转换逻辑都在一个地方结束,你可以避免乱丢转换逻辑“到处都是”。
有时在/更新对象时,底层(源)对象中会出现状态。您可能没有在清理过的api中公开这些数据,所以它必须隐藏在某个地方。
如果您选择封装原始对象,那么将来有可能会有人破坏该封装,并开始泄漏底层对象的血腥细节。仅仅这个原因通常足以让我不能保留对原始实例的引用,因为我实际上已经理解了六个月后当我匆忙时我正在做什么。但是如果你将它保存在其他地方你就需要对原件进行生命周期管理,所以我通常最终将它藏在“干净”对象的某个秘密界面上。