Являются шаблоны разработки действительно слабыми местами языка?

Мы перемещали некоторый Классический код ASP в Windows 2008 на 64 бита. Вот некоторые вещи, которые мы сделали или обнаружили по пути:

  • Начинаются путем хостинга приложения в 'Классическом' конвейерном пуле приложений режима. Как только вещи работают очень хорошо, можно переключиться на 'Интегрированный Режим', должен, необходимо усилить функции, которые он предлагает позднее.

  • , Если Ваше приложение ASP использует какое-либо третье лицо на 32 бита или внутренние компоненты, необходимо будет настроить пул приложений для выполнения в режиме на 32 бита. DLL на 32 бита не загрузится в процесс на 64 бита. Можно настроить это в Расширенных настройках пула приложений. Набор Enable 32-Bit Applications к True.

  • Для принуждения подробного сообщения об ошибке Классическим ASP откройтесь, страница 'функции' ASP для веб-сайта тогда расширяются Debugging Properties узел. Набор Send Errors To Browser к True.

  • , Если Ваше приложение использует родительские пути, необходимо будет настроить это на странице 'функции' настроек ASP (то же один как выше). Установка находится под Behaviour узел и названа Enable Parent Paths. Настройка по умолчанию False так же, как с IIS6.

  • анонимную учетную запись по умолчанию в IIS7 называют IUSR. Можно изменить это путем открытия страницы 'функции' Настроек аутентификации для веб-сайта и редактирования Anonymous Authentication установка.

  • Предпочитают использовать Идентификационные данные Пула приложений и для Пула приложений и для сайта Анонимная учетная запись: Идентификационные данные Пула приложений

36
задан 4 revs, 4 users 100% 30 April 2012 в 22:46
поделиться

8 ответов

Некоторые канонизированные шаблоны проектирования - адаптер, фабрика, команда, посетитель и т. Д. - являются приблизительными функциями, встроенными в другие языки. Вне моей головы:

  • Обработчики событий в C # - это встроенные версии шаблона наблюдателя. Подумайте, как бы вы подключили события в C #, если бы вам каждый раз приходилось катить своего собственного наблюдателя.

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

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

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

  • Шаблон абстрактной фабрики принимает аргумент и в качестве результата возвращает фабрику. В общем, вы можете думать о фабриках как о оболочках вокруг функции (точнее, обертках вокруг конструктора). Итак, вы передаете аргументы функции и в результате получаете функцию, что делает этот шаблон довольно похожим на каррирование.

  • Шаблон декоратора позволяет вам присоединять или удалять поведения объекта во время выполнения. В JavaScript вы можете добавлять или удалять функции без явной реализации шаблона декоратора благодаря объектно-ориентированной модели «прототип».

Итак, у нас есть набор шаблонов проектирования, которые имитируют функции, присущие другим языкам. Особенность зависти не вызывает

47
ответ дан 27 November 2019 в 05:34
поделиться

Я бы не назвал их дефектами.

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

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

Вы могли купить доски и стальные балки и построить из них здание.

Вы могли купить сборные стены и фермы и превратить их в здание.

Вы можете купить здание и просто начать с него.

При строительстве здания с досками и балками отсутствуют элементы сборных стен или есть какие-то дефекты?

18
ответ дан 27 November 2019 в 05:34
поделиться

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

Каждое повторение. Каждое повторение. Каждое повторение.

Некоторых канонизируют с крутыми именами. Они становятся шаблонами дизайна. Сознательное повторение.

Некоторые из них - просто «лучшие практики» или «это сработало для меня». Это шаблоны проектирования без ясности.

Некоторые из них - просто «вещи, которые вы обычно делаете». Это шаблоны проектирования без какого-либо осознанного признания того, что вы повторяете себя.

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

Сегодняшние шаблоны проектирования не являются королевской дорогой к языкам завтрашнего дня. Языковая парадигма не продвигается через серию «исправлений ошибок для предыдущих языков». Если бы это было так, мы бы никогда не создали Visual Basic.

А шаблоны проектирования - гораздо более крупный и широкий интеллектуальный инструмент, чем набор функций упрощенного языка программирования.

10
ответ дан 27 November 2019 в 05:34
поделиться

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

2
ответ дан 27 November 2019 в 05:34
поделиться

Я думаю, что некоторые шаблоны проектирования действительно отражают недостатки языка, а новые языки включают существующие шаблоны в граждан первого класса. Примером нового языка, использующего существующие шаблоны проектирования на других языках (внедрение зависимостей, неизменяемость и т. Д.) И включающего их в качестве функций уровня первого класса, является NOOP от Google.

1
ответ дан 27 November 2019 в 05:34
поделиться

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

0
ответ дан 27 November 2019 в 05:34
поделиться

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

Мне нравится, что язык, с которым я работаю, достаточно мал, чтобы держать его в голове сразу. Такие шаблоны, как DI, связаны со структурными проблемами; должно ли это быть частью языка?

Сколько рук на языке действительно нужно разработчику?

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

1
ответ дан 27 November 2019 в 05:34
поделиться

Я думаю, что Юэн поднимает интересный момент. Возьмем его пример с «подпрограммой». В ранних языках программирования идея передачи параметров подпрограмме и возврата результата была чем-то, что вы должны были явно кодировать. В современных языках он встроен. Или возьмем другой пример: If / then / else встроено в большинство, если не во все современные языки. Но в те времена, когда я был ассемблером, мне приходилось писать код для этого. Не много, конечно, но все же, вам нужно было написать инструкцию jump или goto, чтобы обойти блок else. И тот факт, что вам приходилось писать эти вещи самостоятельно, означал, что разные программисты будут делать это немного по-разному, и было бесконечное искушение быть умным и делать это немного по-другому в этой программе, чтобы сделать ее более эффективной или получить что-то другое. предполагаемое преимущество.

Самый свежий пример, который приходит на ум, - это итераторы. Вы должны написать их вручную на C ++ и ранних версиях Java, но они встроены в Java 5. Это, возможно, синтаксический сахар, вы можете просто создать функции итератора. Лично я считаю, что это хорошая особенность. Это радикально повысит мою продуктивность? Нет.

Есть ли что-то, что мы делаем все время, что должно быть логически встроено в язык, чтобы стандартизировать и упростить его? Интересный вопрос. Я не думаю, что кто-то всерьез станет утверждать, что даже его любимый язык идеален и что улучшения невозможны. Но в каком направлении будет развиваться следующий язык?

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

У меня нет заключения. Я согласен, что это интересный вопрос.

Я полагаю, что кто-то всерьез будет утверждать, что даже его любимый язык идеален и что никакое улучшение невозможно. Но в каком направлении будет развиваться следующий язык?

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

У меня нет заключения. Согласен, это интересный вопрос.

Я полагаю, что кто-то всерьез будет утверждать, что даже его любимый язык идеален и что никакое улучшение невозможно. Но в каком направлении будет развиваться следующий язык?

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

У меня нет заключения. Я согласен, что это интересный вопрос.

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

У меня нет заключения. Согласен, это интересный вопрос.

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

У меня нет заключения. Согласен, это интересный вопрос.

2
ответ дан 27 November 2019 в 05:34
поделиться
Другие вопросы по тегам:

Похожие вопросы: