Что такое программное обеспечение opinionated?

Я часто вижу людей, говорящих, что определенное программное обеспечение "очень самоуверенно" или что Microsoft имеет тенденцию писать "не-самоуверенные" фреймворки. Что это на самом деле означает?

9 ответов


если фреймворк самоуверен, он блокирует или направляет вас в их способ делать вещи.

например: некоторые люди считают, что система шаблонов не должна предоставлять доступ к пользовательским методам и функциям, поскольку она оставляет систему открытой для возврата необработанного HTML. Таким образом, разработчик opinionated framework разрешает доступ только к структурам данных. По дизайну программное обеспечение ограничивает и поощряет дизайнера делать все по-своему.

другой пример (взято из сигнала link) является wiki. У дизайнеров wiki было много мнений. Они думали, что HTML слишком сложен для людей, чтобы писать, поэтому они придумали более естественный способ обновления контента. Они также лишили его причудливого дизайна, потому что чувствовали, что акцент должен быть больше на содержании, чем на дизайне.

Apple имеет сильные мнения, когда он разрабатывает свои продукты.

ООН-упрямый разработка программного обеспечения больше похоже на PERL / PHP. Это позволяет разработчику и доверяет разработчику принимать правильные решения и дает больше контроля в их руках.

Я бы также поместил Microsoft в колонку "без мнений". Хороший пример Microsoft в рамках которой ООН-opininated: .NET. Открыв CLR и спецификации, он открыл его для всех видов языков и стилей реализаций.


самоуверенное программное обеспечение означает, что есть в основном один способ (правильно™) делать что-то и пытаться делать это по-другому будет сложно и неприятно. С другой стороны, делать вещи правильно ™ может сделать его очень легким превратиться с програмным обеспечением по мере того как уменьшено число решений которые вы должны сделать и способность конструкторов програмного обеспечения сконцентрировать на делать работу програмного обеспечения увеличена. Opinionated программное обеспечение может быть большим, чтобы использовать, если все сделано хорошо, если ваша проблема хорошо вписывается в решение. Это может быть реальная боль, чтобы решить те части вашей проблемы, которые не отображаются на предоставленных инструментов. Примером здесь может служить Ruby on Rails.

non-opinionated програмное обеспечение, с другой стороны, выходит серии гибкости к потребителю (проявителю). Он не запрещает один метод решения проблемы, но предоставляет гибкие инструменты, которые могут быть использованы для решения проблемы многими способами. Недостатком этого может быть то, что инструменты настолько гибкие, что может быть относительно сложно разработать какое-либо решение. Гораздо больше решения может быть закодировано вручную пользователем (разработчиком), потому что платформа не предоставляет достаточной помощи. Вы также должны больше думать о том, как предоставить решение, и посредственные разработчики могут оказаться с более бедными решениями, чем если бы они купили какое-то самоуверенное программное обеспечение. PERL, вероятно, является классическим примером не-самоуверенного программного обеспечения.

мой идеал-это упрямый рамки, но с сильными условностями. Я бы поставил ASP.NET MVC в этой категории. На самом деле все программное обеспечение в какой-то степени самоуверенно (хотя, возможно, и не PERL). MVC имеет сильные соглашения в выборе модели, но предлагает множество различных способов решения проблем в рамках этих соглашений. Некоторые из этих способов могут даже разрушить модель. Правильно использовать, однако, в соответствии с конвенциями, разрабатываемыми в таких рамках, может быть настоящей радостью.


Это в основном программное обеспечение, которое работает так, как его авторы думают, что оно должно работать, вместо того, чтобы пытаться угодить всем. Это означает, что многим людям это не понравится, но тем, кто это сделает, это понравится.

Rails, вероятно, является каноническим примером самоуверенной структуры: Вы делаете все по-своему, и все гладко. Если нет, тебе будет больно. Но это нормально - если вы не хотите делать все по-своему, Вы не хотите использовать рельсы.


ради баланса я приведу (довольно самоуверенное) описание, которое более благоприятно для самоуверенного подхода (в отличие от некоторых других ответов).

самоуверенные рамки обеспечивают "золотой путь", который должен быть лучшей практикой для большинства людей и большинства сценариев (в глазах авторов).

Это, однако, не обязательно означает блокирование. Это означает, что для этого может потребоваться дополнительное усилие иначе.

менее самоуверенные рамки предоставляют ряд различных вариантов и оставляют вам решать.

самоуверенные фреймворки обычно снимают с разработчика бремя изобретения колеса или переосмысления одной и той же проблемы снова и снова и, таким образом, помогают сосредоточиться на реальной проблеме.

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


Opinionated программное обеспечение построено и разработано таким образом, что это позволяет легко делать вещи определенным образом. Оно благоволит к некоторым картинам конструкции больше чем другие. В процессе это затрудняет отклонение от стиля разработки программного обеспечения, для которого оно было разработано. Другой способ выразить это заключается в том, что он предпочитает "Соглашение конфигурации". т. е. параметры конфигурации очень ограничены, поскольку программное обеспечение предполагает многие аспекты конфигурации. Программное обеспечение Opinionated обычно быстрее освоить, как только предположения поняты.

Unopinionated программное обеспечение, с другой стороны, делает несколько предположений. И в результате, программное обеспечение / рамки разработки программного обеспечения, которые являются unopinionated часто, как правило, имеют много вариантов конфигурации. Разработчик обычно должен принимать много решений, касающихся различных аспектов программного обеспечения. Часто разрабатываются различные инструменты, чтобы облегчить работу с этими огромными вариантами. например, Visual Studio .NET для .NET, Eclipse IDE для Java и т. д. Непинионированное программное обеспечение обычно занимает больше времени, чем самоуверенное программное обеспечение.


tl; dr:

  • упрямый, например:Ruby на Rails. Есть один особенно предпочтительный способ делать что-то, и вы получаете большую поддержку в этом. Делать что-то другим способом трудно, или для некоторых систем невозможно (Кассандра приходит на ум).
  • ООН-упрямый, например:Perl 5. Вы можете делать все, что хотите, любым способом, в любом стиле. Все стили одинаково открыты, действует и поддерживается.

многие люди ссылаются ASP.NET MVC как" неоткрытая " структура, и я просто хотел взвесить пару мыслей об этом.

Это правда, что ASP.NET MVC не требует слишком многого; вы можете использовать любое решение для сохранения, будь то Linq-to-SQL, ADO.NET сущности, NHibernate и т. д.

с другой стороны, структура MVC имеет тенденцию отдавать предпочтение "соглашению над конфигурацией", чтобы процитировать Фила Хаака, который в значительной степени предлагает следующее предварительно определенный шаблон для размещения контроллеров, представлений, моделей и другого кода. Хотя вы можете изменить это поведение, плыть по течению легче, и для большинства людей это не проблема.

также окружающие ASP.NET MVC-это много самоуверенных людей, что приводит к множеству предвзятых учебников, которые настаивают на покрытии, например, модульное тестирование и инъекция зависимостей; я все за хорошее тестирование и разделение проблем, но я понимаю, что такие темы запихивают немного в глотку, часто опережая более полезные основы.

опять же, я должен признать, что в этих областях сама структура полностью открыта для принятия любого решения для модульного тестирования, которое вы хотите, а также любых инъекций зависимостей и издевательств над фреймворками, которые вы хотите использовать, поэтому я думаю, что это дает еще один пример гибкости, даже в "библейской битве" модульного тестирования и т. д. кажется, это продолжается.


Это количество конвенций, реализованных в рамках и количество решений, которые были приняты.

Если, например, существует 5 (или более) различных способов отправки данных формы в действие контроллера (что имеет место в ASP.NET MVC), рамки кажутся довольно "не-самоуверенными" - решение зависит от вас!

Если, однако, фреймворк позволяет (либо непосредственно отключая другие способы, либо сильно поощряя его) только один способ сделать эта вещь (что имеет место с FUBU MVC), вы можете сказать, что решение было принято фреймворком, тем самым сделав фреймворк самоуверенным.


пример, который вы увидите много на данный момент ASP.NET MVC framework. Это удивительно расширяемый, но это его падение в некоторых отношениях, нет никакого мяса к нему. Хотите сделать доступ к данным? Тебе придется написать это самому. Хочешь немного "Аякса"? Точно так же.

однако, поскольку он очень расширяемый, если вы строите на нем, вы можете превратить его в самоуверенную структуру. Это то, что нравится MVCContrib do, они дают вам конкретные методы выполнения вещи, которые означают, что вы должны писать меньше кода.

Это означает, что если вы хотите отдохнуть от мнения часто больше работы, чем если бы вы работали на ванильной версии. Однако это сценарий 80/20. Если вы правильно выбрали свой самоуверенный фреймворк, вы захотите только оторваться от мнений в 20% случаев, а остальные 80% времени вы будете очень продуктивны.