Я тільки починаю досліджувати SOLID, і я не впевнений, читання з файлів і запис у файли несуть ту саму відповідальність.
Цільовий тип одного типу; Я хочу читати і писати .pdf у своїй програмі.
Додаток знаходиться в Python, якщо це має значення.
Я тільки починаю досліджувати SOLID, і я не впевнений, читання з файлів і запис у файли несуть ту саму відповідальність.
Цільовий тип одного типу; Я хочу читати і писати .pdf у своїй програмі.
Додаток знаходиться в Python, якщо це має значення.
Відповіді:
Реалізація читання та письма, ймовірно, має велику ймовірність бути дуже згуртованою. Якби одне змінилося, так би і інше. Висока згуртованість є яскравою ознакою єдиної відповідальності, а Принцип єдиної відповідальності говорить нам про те, що їх слід об'єднувати в один клас. Якщо ці операції мають низьку згуртованість, швидше за все, розкол їх покращує ремонтопридатність.
Однак, якщо є споживачі, які читають дані лише без письма або пишуть лише без читання, це свідчить про те, що з точки зору інтерфейсу ви повинні відокремлювати ці операції, як це визначено Принципом розбиття інтерфейсу. Це означає, що споживачі повинні визначити два інтерфейси, від яких вони можуть залежати, тоді як File
клас буде реалізовувати обидва інтерфейси.
Коли ви застосовуєте принцип проекту SOLID для проектування об'єкта, ви можете розглядати читання та запис файлів як ОДИНУ відповідальність - працювати з постійними даними
Однак не слід ставити читання та запис файлів у один і той же метод або функцію.
Більшість інших відповідей, здається, не помітили, що у вашому запитанні відсутня одна важлива інформація - ви не сказали нам, чи пов’язані документи, які ви збираєтесь читати та писати!
Чи є у вашій програмі щось на кшталт "об'єкт документа" і записує спочатку у файл PDF, а потім знову читає той самий файл у подібний документ? Або навпаки, воно читає PDF-файли в документ, вносить деякі зміни в нього і знову зберігає цей самий документ у новому PDF-файлі? Тоді читання та письмово слід сприймати як одну з обов'язків. Це може бути так, якщо ваша програма містить або містить щось на зразок компонента "Редактор PDF" або "Інструментарій маніпулювання PDF".
Однак якщо одна частина вашої програми створює деякі файли PDF, наприклад, у складі звіту, а інша незв'язана частина вашої програми читає різні PDF-файли (наприклад, оцінювач вкладення пошти для пошукової системи) та внутрішнє представлення ці останні PDF-файли не мають нічого спільного з випадком першого використання, тоді ці завдання є різними обов'язками.
Спеціально для PDF цей випадок другого використання - це той випадок, який я бачив набагато частіше в різних видах застосувань. Існує набагато більше бібліотек / компонентів, які просто підтримують створення PDF, і лише набагато менша кількість, яка підтримує також читання PDF. Якщо ви збираєтесь використовувати одну бібліотеку для генерації файлів PDF та зовсім іншу для читання PDF-файлів, то повинно бути очевидним, що читання та запис PDF-файлів буде окремим обов'язком.
На думку ( Роберт К. Мартін ) відповідальність - це набір функцій, який виконує один конкретний актор.
Актор повинен бути єдиним джерелом зміни заданої відповідальності (для зміни має бути лише одна причина).
У вашому випадку слід спочатку визначити акторів як перший крок, а потім задати питання:. Чи є актори, які цікавляться лише читанням файлів та іншим письмом?
Якщо це так, то читання та запис файлів - це два окремих обов'язки. Тому що буде багато джерел змін (багато акторів можуть попросити змінити логіку читання і те саме для написання).