4

我最近一直在思考如何以分层方式组织代码。我一直在考虑四种不同的方法:

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

您可能会争辩说,实例化只是一种不同类型的调用堆栈,而继承只是另一个名称空间堆栈,但无论如何,这些都是我的想法。

那么有没有人有任何其他适合这里的概念堆栈,或者调用和命名空间总结了一切?还有其他想法吗?

4

3 回答 3

1

我不确定你在做什么,但另一种类型的“堆栈”可能是依赖项。例如,如果 A 使用 B 类和 C 类,B 类使用 D 和 E,而 C 类使用 F,那么你最终会得到这样的一堆层:

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

另外,我认为您所说的“命名空间”更普遍地称为“包”,它是某种相关类的集合。

于 2010-08-15T21:20:00.147 回答
1

我认为这是一个很好的问题,因为它让我们思考我们构建软件的方式。结构化软件对于在代码及其架构之间创建一个抽象层是必要的。

我最近得出的结论是,水平分层是一种方便的技术,但 垂直分区更有用。水平分层的一个示例是经典的 DAL->BAL->GUI 场景,而垂直分区将应用程序划分为其支持的功能。

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

抛开这一点,我认为我们喜欢在堆栈中思考的原因是因为我们可以看到不同抽象级别的事物,按需在堆栈上推送/弹出事物。像图这样的其他结构有时更适合描述组件之间的依赖关系等问题,但它们更复杂,因此不如堆栈方便。

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

还有什么可以建模为堆栈?坦率地说,我认为我们在这里拥有的东西很多,而且能让你走得很远:

  • 继承层次结构(单一继承)
  • 水平的建筑层
  • 垂直架构层(特征组合)
  • 简单的线性依赖(调用序列、包装器、外观)
于 2010-08-15T22:16:47.423 回答
0

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

于 2010-08-15T21:22:27.593 回答