【问题标题】:conceptual "stacks" and code layers in programming编程中的概念“堆栈”和代码层
【发布时间】:2011-03-30 04:34:50
【问题描述】:

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

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

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

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

【问题讨论】:

  • 我不明白这个声明:“你可以说实例化只是一种不同的调用堆栈,而继承只是另一个命名空间堆栈,但不管这些都是我的想法”。据我所知,这些概念是正交的。如果您能解释它们为何相似的逻辑,将对讨论有所帮助。

标签: namespaces scope callstack


【解决方案1】:

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

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

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

除此之外,我认为我们喜欢在堆栈中思考的原因是因为我们可以看到不同抽象级别的事物,将事物推入/弹出按需堆叠。 Graphs 等其他结构有时更适合描述组件之间的依赖性等问题,但它们更复杂,因此不如堆栈方便。

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

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

  • 继承层次结构(单一继承)
  • 水平的架构层
  • 垂直架构层(特征组合)
  • 简单的线性依赖关系(调用序列、包装器、外观)

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

      【讨论】:

        猜你喜欢
        • 2021-04-29
        • 2020-12-24
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-02-18
        • 2017-05-16
        • 2011-01-05
        • 1970-01-01
        相关资源
        最近更新 更多