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

StackOverflow https://stackoverflow.com/questions/802050

Вопрос

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

Это было полезно?

Решение

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

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

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

У Apple есть твердое мнение при разработке своих продуктов.

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

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

Другие советы

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

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

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

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

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

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

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

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

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

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

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

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

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

tl;dr:

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

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

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

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

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

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

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

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top