В чем суть принципа YAGNI в применении к паттернам проектирования?

Я недавно прочитал "Шаблоны проектирования" прежде всего ". Книга хорошо написана, и ее стоит прочитать. Часто каждая глава начинается с описания проблемы и очень «наивного» решения проблемы. На следующих страницах поднимаются дополнительные требования и ограничения, например, добавление дополнительных функций или обновление поведения. В книге снова представлены «наивные» подходы к обновлениям. До некоторой степени, когда «наивные» подходы приводят к путанице решений (что-то начинает идти не так), книга подталкивает читателей к совершенно новому подходу - целевому шаблону проектирования.

В другом месте я узнал, что принцип сокращенно "YAGNI" вам не понадобится, гласит что «Всегда внедряйте вещи, когда они действительно нужны, никогда, когда вы просто предвидите, что они вам нужны».

Я теперь задаюсь вопросом, объясняет ли «Шаблоны проектирования сначала голова» бессмысленные вещи относительно принципа «ЯГНИ»? Поскольку до определенного момента, учитывая набор требований, мы должны искать самое простое и чистое решение проблемы, верно?


person duong_dajgja    schedule 03.12.2018    source источник
comment
Я не читал книгу, но, учитывая ваше объяснение, похоже, что она соответствует YAGNI: она реализует простейшее решение проблемы, не пытаясь решить проблему, которой еще не существует, до тех пор, пока не достигнет момента, когда код станет беспорядок, потому что проблема в конечном итоге существует.   -  person JB Nizet    schedule 03.12.2018


Ответы (2)


YAGNI + Design Patterns == Refactoring

Существует точка зрения на паттерны проектирования, которая отстаивает рефакторинг под паттерны, а не проектирование под паттерны. Примером этой точки зрения является книга Рефакторинг под шаблоны. Поддерживая книгу, Мартин Фаулер заявляет:

... большинство популярных паттернов "Банда четырех" ... не нужно разрабатывать заранее, их нужно развивать по мере роста системы.

Это подход, который используется и в шаблонах проектирования Head First Design Patterns, и он полностью соответствует YAGNI. Не делайте большого предварительного дизайна, чтобы решить, где вам могут понадобиться выкройки. Вместо этого проводите рефакторинг под шаблоны по мере развития системы. Позвольте шаблонам проявиться со временем.

связанные: Что должно быть первым - шаблон проектирования или код?

person jaco0646    schedule 03.12.2018

Принцип YAGNI не говорит о простом решении или чистом решении. Принцип KISS описывает эти факторы. Суть принципа YAGNI - избегать развития неиспользуемого функционала. Основная цель использования этого принципа - экономия времени на разработку.

Например, представим, что вам нужно интегрировать свое приложение с внешним API. Для достижения этой цели вы разрабатываете клиентский компонент API. Конечно, вы можете сделать клиентский компонент, который будет работать со всеми функциями внешнего API. Этот способ дает возможность создать отличный универсальный компонент, который можно будет использовать во многих различных приложениях в будущем. Но, вероятно, ваше приложение в настоящее время не использует все функции API. Значит, у этого способа есть несколько недостатков:

  • вы сделаете функциональность, которая, возможно, никогда не будет использоваться
  • вы потратите время на разработку на функциональность, которая в настоящее время не имеет ценности для бизнеса.
  • вы не можете протестировать неиспользуемые функции в реальных условиях.

В этом случае развитие только используемого функционала более рационально, чем развитие полного функционала. Об этом нам говорит принцип ЯГНИ.

person Maksym Fedorov    schedule 03.12.2018