Я думаю, що це може бути суперечливим метавідповідомленням, і я трохи запізнююся на вечірку, але я думаю, що це дуже важливо згадати тут, тому що я думаю, що я знаю, звідки ти родом.
Проблема з використанням моделей дизайну полягає в тому, що, коли їх навчають, вони представляють такий випадок:
У вас є конкретний сценарій. Організуйте свій код таким чином. Ось розумний, але дещо надуманий приклад.
Проблема полягає в тому, що коли ти починаєш займатися справжньою інженерною справою, речі не такі вже й сухі. Шаблон дизайну, про який ви читали, не зовсім відповідає проблемі, яку ви намагаєтеся вирішити. Не кажучи вже про те, що бібліотеки, якими ви користуєтесь, повністю порушують все, що зазначено в тексті, пояснюючи ці зразки, кожна по-своєму особливим чином. І як результат, код, який ви пишете, "почуває себе неправильно", і ви задаєте такі питання.
На додаток до цього, я б хотів процитувати Андрія Олександреску, коли говорити про інженерію програмного забезпечення, який стверджує:
Інженерія програмного забезпечення, можливо більше, ніж будь-яка інженерна дисципліна, демонструє багату кратність: Ви можете робити те ж саме так багато правильних способів, і між правильним і неправильним є нескінченні нюанси.
Можливо, це трохи перебільшення, але я думаю, що це ідеально пояснює додаткову причину, чому ви можете відчувати себе менш впевненими у своєму коді.
Саме в такі часи пророчий голос Майка Актона, ігрового двигуна при безсонні, кричить мені в голову:
ЗНАЙТЕ СВОЇ ДАНІ
Він говорить про вхідні дані у вашу програму та бажані результати. І ось ось цей дорогоцінний камінь Фреда Брукса з Міфічного місяця людини:
Покажіть мені свої блок-схеми і прихойте свої таблиці, і я продовжую залишати загадкою. Покажіть мені свої таблиці, і зазвичай мені не потрібні ваші блок-схеми; вони будуть очевидними.
Тож якби я був ти, я б міркував про свою проблему на основі мого типового вхідного випадку і того, чи досягає він потрібного правильного результату. І задайте такі питання:
- Чи правильні вихідні дані з моєї програми?
- Чи виробляється це ефективно / швидко для мого найпоширенішого випадку введення?
- Чи мій код достатньо простий для локальних причин як для мене, так і для моїх товаришів по команді? Якщо ні, то чи можу це зробити простіше?
Коли ви це зробите, на питання "скільки шарів абстрагування або моделей дизайну потрібно" стає набагато простіше відповісти. Скільки шарів абстракції вам потрібно? Стільки, скільки потрібно для досягнення цих цілей, і не більше. "Що з моделями дизайну? Я жодного не використовував!" Ну а якщо вищезазначені цілі були досягнуті без прямого застосування шаблону, то це добре. Зробіть це так, щоб перейти до наступної проблеми. Почніть зі своїх даних, а не з коду.