我最近一直在思考如何以分层的方式组织代码.我一直在想四种不同的方式:
>实例化 – 特别是对象是类的实例.但是,在几种语言(如python)中,类也是从元类实例化的对象.所以你最终可以得到一个实例的对象堆栈.
>继承 – 最终得到一堆超类.即使你有多个继承,你也可能有办法把它变成一个堆栈(比如python中的MRO).
>命名空间 – 范围通常也是分层的.
>调用 – 调用堆栈可能是最熟悉和最古老的概念.它是编程的中流砥柱.
你可以说实例化只是一种不同的调用堆栈,而继承只是另一种命名空间堆栈,但不管这些是我想到的.
那么有没有任何其他概念堆栈适合这里,或者调用和名称空间总结了吗?还有其他想法吗?
最佳答案 我认为这是一个非常好的问题,因为它让我们思考我们构建软件的方式.构建软件对于在代码及其体系结构之间创建抽象层是必要的.
我最近得出结论,水平分层是一种方便的技术,但垂直分区更有用.水平分层的示例将是经典的DAL-> BAL-> GUI场景,而垂直分区将应用划分为其支持的特征.
堆栈模型显然存在于水平分层模型中.但是,当垂直分区功能时,您可以找到堆栈模型.我发现对垂直分区特别有吸引力的是我的每个垂直切片都有自己的水平分层堆栈的想法,这个概念类似于像CQRS一样越来越流行的模式.应用程序的垂直分区之间也可能存在依赖关系,再次建模为堆栈.但有时这还不够,你需要比堆栈更复杂的抽象,比如图形.
从中抽象出来,我认为我们喜欢在堆栈中思考的原因是因为我们可以在不同的抽象层次上看到事物,按需推送/弹出堆栈中的东西.像Graph这样的其他结构有时更适合描述组件之间的依赖关系等问题,但它们更复杂,因此不如堆栈方便.
这也是多重继承被抛弃的原因:依赖关系图(多重继承)比简单堆栈(单继承)更难理解.
还有什么可以建模为堆栈?坦率地说,我认为我们在这里有很多东西,让你走得很远:
>继承Hierachies(单继承)
>水平,建筑层
>垂直建筑层(特征组合)
>简单的线性依赖(调用序列,包装器,外观)