软件体系结构在多大程度上取决于语言?


14

在向我介绍软件体系结构和设计模式时,我注意到在大多数情况下,解释中都隐含了某些语言功能和设计细节。

例如,几乎任何文章或书籍都将使用类和接口来说明思想。在该主题上可以轻松找到的所有内容都会提到对象和OOP概念。

如果编写系统的语言根本没有这样的概念怎么办?例如,如果我使用动态类型且没有接口概念的Python或Node,该怎么办?如果我在接口是短暂构造(在运行时中不存在)的情况下使用TypeScript怎么办?如果我尝试使用函数式编程该怎么办?我应该忽略例如SOLID并寻找其他适合我的语言的概念吗?

如果是,那是什么?不幸的是,据我所知,所有公认的范例都以某种方式引用了OOP概念和类型。如果没有,那么在将通用的体系结构和设计原则适应我的特定语言和用例时应该遵循哪些规则?

您一般如何描述体系结构和语言之间的依赖关系?


我写了一篇有关软件体系结构的文章:管理软件复杂性linkedin.com/pulse/…–
过度交换

首先,是的,软件架构是基于您所考虑的技术来驱动的。例如:在这些线程被IO绑定之前,python不会利用多线程。这是利用多核cpu绑定操作的真正限制。其次,您应该聆听... youtu.be/FF-tKLISfPE第三,您应分析/工作至少5-6年的可扩展部署的特定领域的现有稳定分布式企业产品。这是对技术如何影响设计的有机理解。顺便说一下,这类产品是从头开始在Java之前的世界中编写的。
凌晨

WRT技术...在Java世界中,直到Java 5/6/7语言设计由实际创始人控制为止。从Java 8开始,我将Java视为宣传机器,而不是编程语言。在我看来,java已成为项目经理的技术。因此,作为初学者,我将分析/使用C / C ++ / Python编写的产品
过度交换

请不要在您的问题中使用体系结构一词,这很令人困惑。您的问题是关于设计的。语言的选择通常符合建筑学的标准,您的问题在措辞上是没有道理的。-
马丁·马特

python和javascript 有接口,它们只是不使用单独的关键字来区分它们
-Caleth,

Answers:


11

软件体系结构非常类似于房屋或桥梁的体系结构。桥梁必须承受其自身以及在其上行驶的车辆或在其上行走的人员的重量。它必须承受天气。用于构建它的材料必须既坚固又相对轻巧。

您可以使用多种材料来盖房子。您可以使用砖或灰泥。您可以使用木梁或金属梁。每种材料在重量,强度等方面都有其自己的特性。所有这些特征都会影响体系结构。

同样,您使用的编程语言也会影响构建体系结构的方式。在具有像C ++这样的类的编程语言中,您的体系结构将与在没有像C这样的编程语言中的体系结构看起来不同。

SOLID原则主要涉及面向对象的语言(即具有类的语言)。


4

体系结构取决于实现其目标的能力。语言选择会限制功能。任何图灵完整语言都可以完成任何编程任务。在那之后,这是关于语言如何允许人类可读的解决方案。

许多软件体系结构方案都要求您从核心域业务规则中删除所有技术选择知识。您永远不会从核心中删除知识的一种技术选择就是您选择用来表达它的语言。

当有关建筑的书籍坚持告诉您有关其目标的信息时,只要它能够实现目标,语言就无关紧要。当书籍告诉您如何实现这些目标时,该语言便开始普及。


您的答案很不错,但是可以肯定的是,历史上软件架构是随着技术的发展趋势而实现的。
凌晨

@overexchange好的体系结构的重点是生产可以为下一个趋势做好准备的软件,从而能够比当前趋势更持久。
candied_orange

在中间件世界中,产品架构直到1990年代才能够想到RPC / RMI / CORBA。我看到经典设计依赖于面向过程的remore调用。然后ServiceOArch从体系结构方面改变了中间件的趋势。
overexchange

2
@CandiedOrange就是理论。在实践中,我已经看到很多人从事有时称为“炒作驱动的开发”的工作-从事他们当前的同行圈子在设计时谈论最多的事情,这样您就可以参与其中。
marstato

@marstato同意。最好的例子是,以当前趋势使用Spring / Springboot来执行任何新项目,却不知道为什么?
过度兑换

1

术语“建筑”具有非常具体的含义,与物理世界中的建筑非常相关,其核心是关于建筑事物的艺术和实践,以及事物的制造和组合方式。这样一来,当建筑做得很好时,我认为语言与建筑紧密联系在一起,就像构筑良好的建筑应从其构成材料中充分了解。

在软件中,应根据语言的属性来选择体系结构。如果您要使用面向对象的语言来构建系统,那么我希望系统的体系结构也将是面向对象的。如果您要使用功能性语言来构建系统,那么我希望该系统的体系结构也能起作用。

合理?


感谢您的答复!您是否有机会了解有关动态类型化或功能性语言的软件体系结构的任何资源?我所见过的所有东西都可以直接用于例如Java,但是需要对js进行一些调整。有哪些准则可以使常见的架构模式适应弱类型语言?还是应该尝试一下,还是应该完全不同?
Tristan Tzara '18年

我担心的是,如果使用的是例如Java,那么会有很多关于架构的最佳实践和模式,但是对于不同种类的语言,我还没有看到。所以我想知道如何治疗这些患者
Tristan Tzara

基本上,例如SOLID在这种情况下是否仍然存在?如果是,该如何调整?如果没有,该怎么办?
特里斯坦·特萨拉

SOLID原则在起源上非常面向对象。但是,我认为它们编码的高阶原理可能适用于任何软件系统,而与语言无关。但是最基本的原则是:在建造远远超出喂鸟器的东西之前,您应该了解并了解它们。
RibaldEddie

@TristanTzara面向对象编程是在没有任何面向对象的语言之前发明的。您可以使用任何通用语言来实现。即使那些没有课程的人。
candied_orange

1

首先,我想说的是,即使您所想的语言也对您的构想有深远的影响。PASCAL由Niklaus Wirth和Brian Cernighan和Dennis Ritchie共同创建是有原因的。

在更高的层次上,表达某些概念(以及缺乏其他概念)的能力将指导您的思想,并使您得出某些解决方案,这些解决方案不一定是同一个人,但背景不同。

最后,您提到的概念都可以用任何通用语言实现。只是他们可能没有语法支持,而且实现可能很麻烦。如果您像使用C那样足够投入(或足够疯狂),则可以编写面向对象的x86汇编代码。实际上,C ++的第一个实现是将C ++代码编译为C的预处理器(调试更有趣)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.