アーキテクチャ記述文書はDRY原則の違反ですか?


11

DRY Principle(Do n't Repeat Yourself)は、「すべての知識は、システム内で単一の明確な権威ある表現を持たなければならない」と述べています。ほとんどの場合、これはコードを指しますが、多くの場合、ドキュメントにも拡張されます。

すべてのソフトウェアシステムには、選択したかどうかに関係なくアーキテクチャがあると言われています。つまり、構築するソフトウェアには構造があり、その「構築された」構造がソフトウェアのアーキテクチャです。 構築されたソフトウェアシステムにはアーキテクチャが付属しているため、そのシステムのアーキテクチャ記述を作成することはDRY原則に違反していますか? 結局のところ、アーキテクチャを知る必要がある場合は、常にコードを見ることができます...


コードを見ることでアーキテクチャを識別できると実際に信じていますか?コードは、すべての機能要件と非機能要件、アーキテクチャのトレードオフ、展開の問題、ビジネスコンテキスト、ユースケースシナリオなどを教えてくれますか?あなたのコードが本当にあなたにそれを伝えることができるなら、それは些細なシステムの一つの地獄です。
luis.espinal

@ luis.espinal、コードと実行中のシステムからそれぞれ静的構造と動的構造を識別することができます。これらの構造がシステムのアーキテクチャと同等であるかどうかは、あなたの考え方に依存します。あなたが指摘したように、あなたはまだ、設計上の決定の背後にあるアーキテクチャ上のドライバーと理論的根拠を含むいくつかの大きな塊を見逃しているでしょう。
マイケル

コードの派生構造をシステムのアーキテクチャと同一視する真正な考え方は何ですか?アーキテクチャドライバーを含む大きなチャンクを見逃すことがわかっている場合は、アーキテクチャ全体が欠落しています。これは、コードだけで識別できる静的および動的な構造が、アーキテクチャの全体を表していないことを自明に証明します(思考の学校とは無関係です)。 INCOSE's)、コードはアーキテクチャのほんの一部にすぎないという点で明確です。
luis.espinal

適例。システムのアーキテクチャーでは、特定の数のマシンにデプロイする必要があり、特定の順序で外部インターフェースのオンとオフを切り替えます。コードだけから派生した静的および動的な構造は、それをキャプチャすることはほとんどありません。また、コードから派生した構造は、ソフトウェアアプリケーション(またはコンポーネント)アーキテクチャの静的な側面の実現にのみ関係します。システムアーキテクチャ用ではありません。
luis.espinal

1
@ luis.espinal、この質問への回答を送信してください!このトピックに本当の価値を加えると思う素晴らしい視点を持っているように聞こえます。あなたはこれについて合唱団に説教しているので、誰もが利益を得ることができるようにあなたの考えを完全に説明する答えを作成してみませんか?それが私がそもそも質問をした理由です。
マイケル

回答:


11

考えをコードに複製することは、DRYの原則に違反しますか?

Geez、コードを調べるだけでアーキテクチャを知ることができれば、そもそも「アーキテクチャ記述文書」のようなものはありません。これは繰り返しではなく、システム記述別のレベルであり、コードから簡単に推測することはできません。逆も同様です。そのため、DRYを受け入れても存在する完全な権利があります。


7

DRYを厳格なルールとして受け取らないでください。それは良いことですが、実際には概算しかできません。

また、それはよく書かれていないと思います。「自分自身を繰り返さないでください」は、セマンティックまたは機能の変更を行うために、複数の場所でソーステキストを編集し、異なるが調整されたものを言う必要があるという等しく重要なケースをカバーしていないようです。

違反されないように戒めと見なすのではなく、なぜそれが良いアイデアであるかを理解し、それについて賢明な選択をする方が良いです。複数の場所で調整された編集を行わなければならないのが悪いのは、編集者であるあなたが間違いを犯すからです。エラーなしで変更を行うことは100%信頼できません。10個の異なるソーステキストの変更を行う必要があり、そのうちの9個だけが正しい場合、バグが発生します。調整された変更の数を最小限に抑えるためにソーステキストを配置するのが良い理由です。バグを最小限に抑えます。

私たちは、乾燥が戒めの一つである宗教に属していません。若干の常識をカプセル化するための、わずかに誤解を招きやすい便利な方法です。


4

アーキテクチャ記述またはソフトウェア設計記述、DRYに違反します。しかし、昨年のプロジェクトで開発者が出入りする大規模な組織では、システムが大きすぎて誰もがすべての詳細を頭に入れられないため、これは重要なドキュメントです。同期を保つために必要な「繰り返し」の量は、次の更新または保守中に節約できる労力のために完全に価値があります。


1
これは、DRYの誤解またはブラインドアプリケーションです。アーキテクチャの説明は、それに違反するものではありません。この方法でDRYを盲目的に適用する場合、コード以外はそれに対する違反です...そして、明らかに、これはその考えを思いついた人々の意図ではありませんでした。
luis.espinal

2

アーキテクチャ記述は、DRY原則に違反しません。

あなたのソフトウェアシステムには確かにアーキテクチャが付属しています。また、多くのクラスの多くのファイルに広がっており、概要には不要な多くの無関係な詳細が含まれています。

アーキテクチャドキュメントは、ニュースレポートの最初の段落のようなものである必要があります。これは、プロジェクトの概要、概要、ロードマップです。


1

文書の日付を記入すると、執筆時点のアーキテクチャが説明されます。

一方、コードは現在のアーキテクチャを表しています。

2つの異なること-同じ知識ではありません。

ドキュメントが執筆時点でアーキテクチャを表していると述べている限り、別の時点でのシステムに関する知識が異なるため、知識IMOを複製することはありません。


コードがアーキテクチャを表すことはありません。これは単にアーキテクチャーの現れです。今日変更されたコードは、まだ昨日のアーキテクチャを表している可能性があります。さらに、それは意図した(または契約上必要な)アーキテクチャを表していない可能性があり、これは最も心配する必要があるものです。コードは、それが正しいか間違っているかを通知せず、実行するだけです。それが正しいか間違っているかを知るには、最初にシステムを動かした意図したアーキテクチャと要件を調べる必要があります。
luis.espinal
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.