Флюп прямує в правильному напрямку. Первісно застосовувався до процедур "принцип єдиної відповідальності". Наприклад, Денніс Річі сказав, що функція повинна виконувати одне і робити це добре. Тоді, в C ++, Bjarne Stroustrup сказав, що клас повинен робити одне і робити це добре.
Зауважте, що, за винятком правил, ці два формально мало або нічого спільного між собою. Вони задовольняють лише те, що зручно виражати мовою програмування. Ну, це щось. Але це зовсім інша історія, ніж те, на чому рухається флуп.
Сучасні (тобто гнучкі та DDD) реалізації більше зосереджуються на тому, що важливо для бізнесу, ніж на тому, що може виражати мова програмування. Дивовижна частина полягає в тому, що мови програмування ще не наздогнали. Старі мови, подібні до FORTRAN, охоплюють обов'язки, що відповідають основним концептуальним моделям того часу: процеси, застосовані до кожної картки під час проходження через зчитувач карт, або (як у С) обробка, що супроводжувала кожне переривання. Потім з'явилися мови ADT, які дозріли до того, щоб зрозуміти, що DDD люди згодом переосмислили як важливі (хоча Джим Сусіди більшу частину цього з'ясував, опублікував та використовував до 1968 року): що ми сьогодні називаємо класами . (Вони НЕ модулі.)
Цей крок був менш еволюцією, ніж маятниковий розмах. Коли маятник перекинувся на дані, ми втратили моделювання випадку використання, притаманне FORTRAN. Це добре, коли ваш основний фокус включає дані або форми на екрані. Це чудова модель для програм типу PowerPoint або, принаймні, для його простих операцій.
Що загубилося - це системні обов'язки . Ми не продаємо елементи DDD. І ми не дуже добре класифікуємо методи. Ми продаємо системні обов'язки. На якомусь рівні вам потрібно розробити свою систему на основі єдиного принципу відповідальності.
Тож якщо ви подивитесь на таких людей, як Ребекка Вірфс-Брок, чи я, які раніше говорили про методи класу, ми зараз говоримо з точки зору використання. Ось що ми продаємо. Це системні операції. Випадок використання повинен нести єдину відповідальність. Випадок використання рідко є архітектурною одиницею. Але всі намагалися зробити вигляд, що це так. Скажіть, наприклад, людей SOA.
Ось чому я захоплююсь архітектурою DCI Тригве Реенскауга - про це описано в книзі Lean Architecture нагорі. Це, нарешті, надає деякого реального ставлення до того, що раніше було довільним і містичним підкоренням "єдиної відповідальності" - як це виявляється у більшості аргументацій, наведених вище. Цей зріст стосується ментальних моделей людини: кінцеві споживачі перші І програмісти другі. Це стосується проблем бізнесу. І, майже випадково, вона інкапсулює зміни, коли флюп кидає нам виклик.
Принцип єдиної відповідальності, як ми знаємо, це або динозавр, що залишився з часів свого походження, або кінь хобі, яку ми використовуємо як заміну для розуміння. Вам потрібно залишити кілька цих коней-хобі позаду, щоб зробити чудове програмне забезпечення. А для цього потрібно замислитись. Зберігати речі просто та легко зрозуміти, працює лише тоді, коли проблема проста і зрозуміла. Мене не страшно цікавлять ці рішення: вони не типові, і справа не в тому, де лежить виклик.