Чи документ з описом архітектури є порушенням принципу DRY?


11

Принцип DRY (не повторюй себе) зазначає, що "кожен предмет повинен мати єдине, однозначне, авторитетне представлення в системі". Більшість часу це стосується коду, але він часто поширюється і на документацію.

Кажуть, що кожна програмна система має архітектуру, вибирали ви її чи ні. Іншими словами, програмне забезпечення, яке ви будуєте, має структуру, і структура "як побудована" - це архітектура програмного забезпечення. Оскільки вбудована програмна система поставляється з архітектурою, чи створення опису архітектури цієї системи є порушенням принципу DRY? Зрештою, якщо вам потрібно знати архітектуру, ви завжди можете просто подивитися на код ...


Ви насправді вірите, що можете розпізнати архітектуру, подивившись на код? Код розповість про всі функціональні та нефункціональні вимоги, архітектурні компроміси, проблеми розгортання, бізнес-контекст, сценарії використання випадків тощо, тощо? Якщо ви в коді можете ПРАВИЛЬНО сказати вам це, це одне пекло тривіальної системи.
luis.espinal

@ luis.espinal, Можна відрізнити статичні та динамічні структури відповідно від коду та запущеної системи. Чи будуть ці структури еквівалентні архітектурі системи, залежатиме від вашої школи думки. Як ви вже зазначали, ви все одно не будете бракувати деяких великих фрагментів, включаючи будь-які архітектурні драйвери та обґрунтування дизайнерських рішень.
Майкл

Яка справжня школа думки прирівнює структури, похідні від коду, архітектурі системи? Якщо ми знаємо, що ми будемо пропускати кілька великих фрагментів, включаючи будь-які архітектурні драйвери, то нам не вистачає всієї архітектури. Це тривіально доводить, що статичні та динамічні структури, які можна відрізнити лише від коду, не представляють собою цілі архітектури (незалежно від школи думки.) Якщо ми подивимось на досить добре сформовані визначення систем та архітектури програмного забезпечення (тобто SEI або INCOSE), вони зрозумілі, що код є лише частиною архітектури.
luis.espinal

конкретний випадок. Архітектура системи може вимагати від мене розгортання на певній кількості машин, при цьому зовнішні інтерфейси вимикаються та включаються в певному порядку. Статичні та динамічні структури, отримані лише від коду, навряд чи зможуть зрозуміти, що (якщо взагалі є). Очевидно, однак, вони є частиною розгортання та експлуатаційних аспектів архітектури системи. І будь-яка структура, похідна від коду, стосуватиметься лише реалізації статичних аспектів архітектури програмного забезпечення (або компонента). Це ніколи не може бути для системної архітектури.
luis.espinal

1
@ luis.espinal, запрошую надіслати відповідь на це питання! Здається, ви представляєте прекрасну точку зору, що, на мою думку, додасть справжню цінність цій темі. Ви про це проповідуєте хору, то чому б не створити відповідь, яка повністю пояснює ваше мислення, щоб кожен мав користь? Ось чому я задав питання в першу чергу.
Майкл

Відповіді:


11

Чи дублювання ваших думок у коді порушує принцип DRY?

Гейз, якби ти просто міг знати архітектуру, заглянувши в код, у першу чергу не було б таких речей, як "документи з описом архітектури". Це не повторення, це ще один рівень опису системи , який не можна тривіально вивести з коду, і навпаки. Тож воно має повне право на існування, навіть якщо ви сприймаєте ДУХУ.


7

Не сприймайте DRY як жорстке і швидке правило. Це гарна річ, але ви можете лише наблизити її на практиці.

Також я думаю, що це не добре написано. "Не повторюй себе", схоже, не охоплює настільки ж важливого випадку, що для внесення смислових чи функціональних змін вам доведеться редагувати вихідний текст у кількох місцях, говорячи про різні, але узгоджені речі.

Замість того, щоб сприймати це як заповідь не порушувати, краще зрозуміти, чому це гарна ідея, і зробити розумний вибір щодо неї. Причина, через яку погано робити узгоджені редагування в декількох місцях, полягає в тому, що ви, редактор, помиляєтесь. Ви не на 100% надійні, щоб внести зміни без помилок. Якщо вам доведеться внести 10 різних змін у вихідний текст, і ви отримаєте лише 9 з них правильно, ви ввели помилку . Ось чому упорядкувати вихідний текст для мінімізації кількості скоординованих змін - це добре. Це мінімізує помилки.

Ми не належимо до релігії, в якій СУХА є однією із заповідей. Це просто зручний, хоч і трохи оманливий спосіб інкапсуляції якогось здорового глузду.


4

Опис архітектури, або Software Design Опис робить порушують DRY. Однак у великій організації, де проекти минулого року розробники приїжджають та йдуть, а система занадто велика, щоб жодна людина не могла зберігати всі деталі в голові, це критичний документ. Кількість "повторень", необхідних для збереження синхронізації, цілком вартує того, щоб витратити зусилля під час наступного оновлення чи обслуговування.


1
Це непорозуміння або сліпе застосування DRY. Архітектурний опис не є його порушенням. Якщо слід сліпо застосовувати DRY таким чином, то все, крім коду, є порушенням цього права ... і, очевидно, це не було наміром тих, хто придумав ідею про це.
luis.espinal

2

Опис архітектури не порушує принцип DRY.

У вашій програмній системі, безумовно, є архітектура. І він розповсюджується на багато файлів, у багатьох класах, із безліччю сторонніх та деталей, непотрібних для огляду.

Ваш архітектурний документ повинен бути як перший абзац звіту про новини: це конспект, резюме, дорожня карта проекту.


1

Якщо ви датуєте документ, то він описує архітектуру на момент написання.

Тоді як код представляє архітектуру в даний момент.

Дві окремі речі - не однакові знання.

Поки ви заявляєте, що документ представляє архітектуру під час написання, ви не дублюєте ІМО знань, оскільки його різні знання, якщо його про систему в інший момент часу.


Код ніколи не представляє архітектури. Це просто прояв архітектури. Код, який було змінено сьогодні, все ще може представляти архітектуру вчорашнього дня. Крім того, він може не відображати намічену (або за контрактом) архітектуру, про що ви повинні турбуватися найбільше. Код не говорить вам, правильно чи неправильно, а лише те, що він працює. Щоб знати, правильно чи неправильно, ви повинні подивитися на передбачувану архітектуру та вимоги, які спричинили систему для початку.
luis.espinal
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.