namespaces - 概念 "stacks"和编程中的代码层

标签 namespaces scope callstack

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

  • 实例化——特别是对象是类的实例。但是,在多种语言(如 Python)中,类也是从元类实例化的对象。所以你最终可以得到一个对象的实例堆栈。
  • 继承——你最终会得到一堆父类(super class)。即使您有多重继承,您最终也可能有办法将其转换为堆栈(如 Python 中的 MRO)。
  • 命名空间——范围通常也是分层的。
  • 调用——调用堆栈可能是最熟悉和最古老的概念。它是编程的中流砥柱。

  • 您可能会争辩说,实例化只是一种不同的调用堆栈,而继承只是另一个 namespace 堆栈,但不管这些是我想到的。

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

    最佳答案

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

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

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

    撇开这一点,我想我们喜欢的原因成堆思考 是因为我们可以在看到东西不同级别的抽象 ,按需推送/弹出堆栈上的东西。其他结构如 有时更适合描述问题,如 依赖项 组件之间,但它们更复杂,因此不如堆栈方便。

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

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

  • 继承层次结构(单继承)
  • 水平,建筑层
  • 垂直架构层(特征组合)
  • 简单的线性依赖项(调用序列、包装器、外观)
  • 关于namespaces - 概念 "stacks"和编程中的代码层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3489271/

    相关文章:

    AngularJS:指令范围没有被调用 $destroy

    debugging - 带有变量的haskell中调用堆栈的跟踪

    C#:当两个命名空间相似时尝试解析类时出现问题

    jsf - 命名空间为 http ://xmlns. jcp.org/jsf/html 的元素可能没有命名空间 http ://xmlns. jcp.org/jsf 中的属性

    javascript - 这个函数有闭包吗?

    r - 将函数中的变量存储在全局环境中

    python - Python中的递归堆栈

    objective-c - 调用方法时会发生什么?争论在哪里?

    php - 自动加载和命名空间

    php - 如何更改随 SOAP 请求发送的命名空间?