ソフトウェアアーキテクチャは言語にどの程度依存していますか?


14

ソフトウェアアーキテクチャと設計パターンについて自分自身を教育していると、ほとんどの場合、言語の機能と設計の詳細が説明に含まれていることに気付きました。

例えば、それに関する実際の記事や本は、クラスとインターフェースを使用してアイデアを説明します。このトピックで簡単に見つけられるものはすべて、オブジェクトとOOPの概念に言及しています。

システムが記述されている言語にそのような概念がまったくない場合はどうなりますか?たとえば、動的に型付けされ、インターフェイスの概念がないPythonまたはNodeを使用した場合はどうなりますか?インターフェイスが一時的な構成要素であり、ランタイムには存在しないTypeScriptを使用するとどうなりますか?関数型プログラミングを採用しようとしている場合はどうなりますか?たとえばSOLIDを無視して、自分の言語に適した他の概念を探す必要がありますか?

はいの場合、それらは何ですか?残念ながら、よく採用されているすべてのパラダイム(私が知る限り)は、何らかの形でOOPの概念と型を参照しています。いいえの場合、一般的なアーキテクチャと設計の原則を特定の言語とユースケースに適合させるとき、どの規則に従う必要がありますか?

一般的に、アーキテクチャと言語の依存関係をどのように説明しますか?


ソフトウェアアーキテクチャに関する記事を書きました:ソフトウェアの複雑さの管理linkedin.com/pulse/…–
overexchange

最初に、はい、ソフトウェアアーキテクチャは、ユーザーが念頭に置いているテクノロジに基づいて駆動されます。たとえば、Pythonは、これらのスレッドがIOバインドされるまでマルチスレッドを活用しません。これは、マルチコアCPUバウンド操作の利用における実際の制限です。第二に、これを聞く必要があります... youtu.be/FF-tKLISfPE第三に、スケーラブルにデプロイされた特定のドメインの既存の安定した分散エンタープライズ製品を少なくとも5〜6年間分析/作業する必要があります。これは、テクノロジーが設計にどのように影響するかを有機的に理解したものです。ちなみに、このような製品は、Javaの前の世界でゼロから作成されました。
過剰交換

Wrtテクノロジ... Javaの世界では、Java 5/6/7言語設計が実際の創業者を制御するまで。java 8から、私はjavaをプロパガンダマシンと見なしますが、プログラミング言語とは見なしません。私の意見では、Javaはプロジェクトマネージャーのテクノロジーになっています。だから、初心者として、私はC / C ++ / Pythonの使用して書かれた製品に/仕事を分析するだろう
overexchangeを

質問で「アーキテクチャ」という言葉を使用しないでください。混乱を招きます。あなたの質問はデザインに関するものです。言語の選択は、一般的なアーキテクチャとしての資格でしょう、あなたの質問は、それが言葉で表現されている方法は意味がありません...
マーティンMAAT

また、pythonとjavascriptにインターフェースがあり、それらを区別するために別個のキーワードを使用しません
-Caleth

回答:


11

ソフトウェアアーキテクチャは、家や橋のアーキテクチャに非常によく似ています。橋は、それ自体と、その上を運転する車両またはその上を歩く人々の重量を保持する必要があります。天気に耐えなければなりません。それを構築するために使用する材料は、強力で比較的軽量でなければなりません。

家を建てるために使用できる多くの材料があります。レンガまたはスタッコを使用できます。木製の梁や金属の梁を使用できます。各素材には、重量、強度などの点で独自の特性があります。これらの特性はすべてアーキテクチャに影響します。

同様に、使用するプログラミング言語は、アーキテクチャの構築方法に影響します。C ++のようなクラスを持つプログラミング言語では、Cのようなものではないプログラミング言語とはアーキテクチャが異なって見えます。

SOLIDの原則は、主にオブジェクト指向言語(つまり、クラスを持つ言語)に関するものです。


4

アーキテクチャは、その目標を達成する能力に依存しています。言語の選択により、機能が制限される場合があります。チューリング完全言語には、プログラミングタスクを完了する機能があります。それ以降は、人間が読むことができる言語がソリューションを可能にするかどうかについてです。

多くのソフトウェアアーキテクチャスキームでは、コアドメインのビジネスルールからテクノロジの選択に関するすべての知識を削除するように求められます。コアから知識を決して削除できない技術的な選択の1つは、それを表現するために選択した言語です。

建築に関する本が彼らの目標についてあなたに話すことに固執するとき、それは目標を達成することができる限り、言語は重要ではありません。本がこれらの目標を達成する方法を教えてくれると、言語は重要になり始めます。


あなたの答えにはいい点がありますが、確かに、歴史的にソフトウェアアーキテクチャはトレンドのテクノロジーで実装されていました。
過剰交換

優れたアーキテクチャのポイントである@overexchangeは、次のトレンドに備えて現在のトレンドよりも長持ちできるソフトウェアを作成することです。
candied_orange

ミドルウェアの世界では、1990年代まで製品アーキテクチャはRPC / RMI / CORBAを超えて考えることができませんでした。プロシージャ指向の再呼び出しに依存する古典的なデザインを見ました。その後、ServiceOArchはアーキテクチャの観点からミドルウェアのトレンドを変えました。
過剰交換

2
@CandiedOrangeそれが理論です。実際には、多くの人々が「誇大広告駆動型開発」と呼ばれることをしているのを見てきました-現在の仲間のサークルがデザイン時に最も話していることをやれば、そのトークに参加できます。
marstato

@marstato同意しました。最良の例は、知らないうちに新しいプロジェクトに現在のトレンドでSpring / Springbootを使用している理由です。
過剰交換

1

用語としてのアーキテクチャは、物理的な世界のアーキテクチャに非常に関連する本当に特定の意味を持ち、その核となるのは、物を作る芸術と実践、物がどのように作られ組み立てられるかです。そのように考えると、建築がうまくできていれば、言語は建築と密接に結びついていると思います。よく建築された建物は、それを構成する素材によって密接に知らされるべきです。

ソフトウェアでは、言語のプロパティと一致する方法でアーキテクチャを選択する必要があります。オブジェクト指向の言語を使用してシステムを構築している場合、システムのアーキテクチャもオブジェクト指向であることを期待します。関数型言語を使用してシステムを構築している場合、そのシステムのアーキテクチャも機能することが期待されます。

理にかなっていますか?


お返事をありがとうございます!おそらく、動的に型付けされた言語または関数型言語に関してソフトウェアアーキテクチャについて詳しく説明しているリソースを知っていますか?tbh私が見たすべては、たとえばJavaですぐに使用できますが、たとえばjsに適応させる必要があります。一般的なアーキテクチャパターンを弱く型付けされた言語に適合させるための可能なガイドラインはどれですか?それを試してみるべきでしょうか、それともまったく異なるものでしょうか?
トリスタンツァラ

私の懸念は、たとえばJavaを使用している場合、アーキテクチャには多くのベストプラクティスとパターンがあるということでしたが、異なる種類の言語には見たことがありませんでした。私はそれらをどのように扱うか、思っていたので
トリスタン・ツァラ

基本的に、例えばSOLIDはそのような場合でもまだ有効ですか?はいの場合、どのように適応しますか?いいえの場合はどうすればいいですか?
トリスタンツァラ

SOLIDの原則は、元々非常にオブジェクト指向です。しかし、言語に関係なく、あらゆるソフトウェアシステムに適用可能な高次の原則をエンコードしていると思います。しかし、基本的な原則はまさにそれです。鳥を飼う人をはるかに超えて構築する前に、それらを知って理解する必要があります。
RibaldEddie

@TristanTzaraオブジェクト指向プログラミングは、オブジェクト指向言語の前となしで発明されました。任意の汎用言語で実行できます。クラスを持っていない人でも。
candied_orange

1

まず始めに、あなたが考えている言語でさえ、あなたが思いつくものに深い影響を与えていると思います。PASCALがNiklaus Wirthによって作成され、CがBrian KernighanとDennis Ritchieによって作成された理由があります。

より高いレベルでは、特定の概念(および他の概念の欠如)を表現する能力があなたの考えを導き、必ずしも同じ背景の異なる他の人ではない特定の解決策に到達します。

最後に、あなたが言及した概念は、すべての汎用言語で実装できます。構文的なサポートが含まれておらず、実装が面倒な場合があるだけです。オブジェクト指向のx86アセンブリコードは、Cの場合と同じように十分にコミット(または非常識)できれば作成できます。実際、C ++の最初の実装は、C ++コードをCにコンパイルしたプリプロセッサであり、はるかに楽しいデバッグ)。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.