我有一个案例:
有SomeNode
,由不同的基本部分组成:比如某些类型的A,B,C
。还有一个转换函数可以将SomeNode
的实例转换为另一个SomeNode
。
但是,SomeNode
除了A,B,C
之外,还可能会添加一些其他部分,因此可能会D
作为SomeNode
的第四部分。因此,转换函数的接口可能还需要相应地更改新添加的组件SomeNode
,但可能会共享一些相同的逻辑。
然后我一直在想,抽象SomeNode
及其转换函数的简易设计是什么?使用特质?怎么样?一些灵感的例子?
谢谢,
答案 0 :(得分:2)
为了管理模块化,请查看蛋糕模式(又名面包末日模式)。关于这个主题有一些有趣的文章:
为了管理转换和特征,Scala编译器是我能想到的最好的例子。
答案 1 :(得分:1)
也许我错过了什么,但你不是在寻找继承吗?
class SomeNode(val a: Int, val b: String, val c: Char)
class SpecialNode(from: SomeNode, val d: List[Int]) extends
SomeNode(from.a, from.b, from.c)
SpecialNode
分享SomeNode
字段并添加新的d
字段。转型看起来像这样(当然它可能更复杂:
def transform(node: SomeNode) = new SpecialNode(node, Nil)
答案 2 :(得分:1)
我犹豫是否以牺牲显示我的菜鸟身份来写这篇文章,但根据问题中使用的关键词,听起来像是“ OOP基础”正在被要求。
“如何抽象数据和控件以支持简单的可扩展性?”(泛化)
“有SomeNode,由不同的基本部分组成:”(聚合)
“还有一个转换函数可以将SomeNode的实例转换为另一个SomeNode。”(多态)
“但是,SomeNode可能会添加一些其他部分,除了A,B,C,...函数的界面可能还需要相应地更改新添加的组件SomeNode,但可能会有一些相同的逻辑共享。“(接口)
“然后我一直想知道,抽象SomeNode及其转换函数以获得简单的可扩展性有什么好的设计?”(继承)
根据我对这个问题的解释,我建议研究 S.O.L.I.D。设计原则 http://www.youtube.com/watch?NR=1&v=05jVWgKZ6MY&feature=endscreen