1

我有一个案例:有SomeNode,它由不同的基本部分组成:比如说某些类型的A,B,C. 还有一个转换函数可以将 的实例转换SomeNode为另一个SomeNode

但是,SomeNode除了 之外,还可以添加一些其他部分A,B,C,所以说可能是D的第四部分SomeNode。因此,转换函数的接口可能也需要针对新添加的组件进行相应的更改SomeNode,但可能会共享一些相同的逻辑。

然后我一直在想,什么是抽象的好设计SomeNode以及它的易于扩展的转换功能?使用特质?如何?一些灵感的例子?谢谢,

4

3 回答 3

2

要管理模块化,请查看 Cake 模式(又名 Bakery of Doom 模式)。关于这个主题有一些有趣的文章:

对于管理转换和特征,Scala 编译器是我能想到的最好的例子。

于 2012-11-03T20:57:27.940 回答
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)
于 2012-11-03T20:33:55.077 回答
1

我不愿以牺牲我的菜鸟身份为代价来写这篇文章,但根据问题中使用的关键字,听起来“ OOP 基础知识”是所要求的。

“如何抽象数据和控制以支持易于扩展?” (概括)

“有SomeNode,由不同的基本部分组成:”(聚合)

“还有一个转换函数可以将 SomeNode 的一个实例转换为另一个 SomeNode。” (多态性)

“不过,SomeNode中可能还添加了一些其他的部分,除了A、B、C,……功能的接口可能也需要为新添加的组件SomeNode做相应的改变,但可能会有一些相同的逻辑共享。”(界面)

“那我一直在想,为了便于扩展,抽象 SomeNode 及其转换功能有什么好的设计?” (遗产)

根据我对问题的解释,我建议研究SOLID 设计原则 http://www.youtube.com/watch?NR=1&v=05jVWgKZ6MY&feature=endscreen

于 2012-11-03T21:00:55.173 回答