2010-08-15 26 views
4

最近我一直在想如何以分层的方式组织代码。我一直在想四种不同的方式:概念性“堆栈”和编程中的代码层

  1. 实例化 - 特别是对象是类的实例。但是,在多种语言(如Python)中,类也是从元类实例化的对象。所以你可以结束一个实例堆栈的对象。
  2. 继承 - 你最终得到一堆超级类。即使你有多重继承,你最终可能有办法将它变成一个堆栈(就像Python中的MRO)。
  3. 命名空间 - 范围通常也是分层的。
  4. 调用 - 调用堆栈可能是最熟悉和最古老的概念。它是编程的中流砥柱。

你可能会认为实例化只是一种不同的调用堆栈,并且继承只是另一个名称空间堆栈,但不管这些是我想到的。

那么,有没有人有任何其他的概念堆栈适合在这里,或做电话和命名空间总结一切?任何其他想法?

+0

我不明白这个声明:“你可能会认为实例化只是一种不同的调用堆栈,而且继承只是另一种命名空间栈,但不管这些是我想到的“。据我推论,这些概念是正交的。如果你能解释为什么他们是相似的逻辑,这将有助于讨论。 – 2010-08-15 21:16:20

回答

1

我认为这是一个非常好的问题,它让我们思考我们构建软件的方式。为了在代码和其体系结构之间创建一个抽象层,必须构造软件。

最近我得出的结论是,水平分层是一个方便的技术,但垂直分区是比较有用的。水平分层的一个例子是传统的DAL-> BAL-> GUI方案,而垂直分区将应用程序划分为它支持的功能。

堆栈模型明显存在于水平分层模型中。但是,当垂直分区功能时,您可以找到堆栈模型。我发现垂直分区特别吸引人的地方在于,我的每个垂直分片都可以有自己的水平分层堆栈,这种想法类似于像CQRS一样越来越流行的模式。在应用程序的垂直分区之间也可能存在依赖关系,并再次建模为堆栈。但有时这是不足够和你需要一个更复杂的抽象比堆栈,如

抽象从远,我认为我们喜欢认为栈的原因是因为我们可以抽象的不同程度的看东西,推/点播栈上弹出的东西。其他结构如有时更适合描述组件之间的问题,如依赖项,但它们更复杂,因此不如堆栈方便。

这也是多重继承被抛弃的原因:依赖关系图(多重继承)比简单堆栈(单一继承)更难理解。

还有什么可以建模为堆栈?坦率地说,我认为我们这里的是相当多的,并得到很远的你:

  • 继承Hierachies(单继承)
  • 水平,architectual层
  • 垂直architectual层(功能组成)
  • 简单线性依赖关系(调用序列,包装器,外观)
1

我不确定你在做什么,但另一种类型的“堆栈”可能是依赖关系。例如,如果A使用类B和C,以及B级使用d和E,而C类使用F,则你最终层这样的堆栈:

+---------+ 
| A | 
+-----+---- 
| B | C | 
+-----+---+ 
| D E | F | 
+-----+---+ 

另外,我觉得你正在调用一个“命名空间”通常会被称为“包”,这是一些相关类的集合。

0

据我了解你的问题,你正试图考虑如何实现面向对象的运行时环境。你说得对,堆栈可以用于大多数问题,但我认为这些概念比它们的实现更重要。也许你应该更具体。这个问题的原因是什么?你有没有解决不了的问题?