Замок Windsor является там какими-либо оборотными сторонами?

Примечание: Неопределенный индекс

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

Типичным примером для уведомления Undefined Index будет ( demo )

$data = array('foo' => '42', 'bar');
echo $data['spinach'];
echo $data[1];

Оба spinach и 1 не существуют в массив, вызывающий запуск E_NOTICE .

Решение состоит в том, чтобы убедиться, что индекс или смещение существуют до доступа к этому индексу. Это может означать, что вам необходимо исправить ошибку в вашей программе, чтобы убедиться, что эти индексы существуют, когда вы ожидаете их. Или это может означать, что вам нужно проверить, существуют ли индексы с помощью array_key_exists или isset :

$data = array('foo' => '42', 'bar');
if (array_key_exists('spinach', $data)) {
    echo $data['spinach'];
}
else {
    echo 'No key spinach in array';
}

Если у вас есть код например:


...

, тогда $_POST['message'] не будет установлена, когда эта страница будет загружена первой, и вы получите указанную выше ошибку. Только когда форма будет отправлена ​​и этот код будет запущен во второй раз, будет существовать индекс массива. Вы обычно проверяете это с помощью:

if ($_POST)  ..  // if the $_POST array is not empty
// or
if ($_SERVER['REQUEST_METHOD'] == 'POST') ..  // page was requested with POST

Вопросы, относящиеся:

35
задан shA.t 27 June 2015 в 12:22
поделиться

6 ответов

Отвечать на Ваши вопросы:

  1. , Который использует отражение и каждый раз, когда объект называют от контейнера, отражение должно используемый, таким образом, производительность будет ужасна. (Имеет место это? это использует отражение о каждом вызове?)
  • нет, это не делает. Большую часть времени это использует мало отражения при регистрации компонента. Это может также использовать отражение при генерации типа прокси, в первый раз, когда Вы запрашиваете компонент от контейнера.
  1. , Если я полагаюсь на Интерфейсы; как заключают меня сделка с объектами, которые имеют дополнительные методы и свойства, которые были прикреплены на класс? (посредством наследования)
  • Это - весь вопрос дизайна. Вы не хотите создавать каждый объект контейнером. Вы используете его, прежде всего, для сервисных зависимостей. В этом случае Вы не заботитесь о том, что тип на самом деле скрывает позади интерфейса (это - смысл его, не так ли?).

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

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

34
ответ дан Kirk 27 November 2019 в 06:50
поделиться

Я использовал контейнеры МОК (Spring.NET и StructureMap) в нескольких производственных приложениях при высокой загрузке (не Facebook/MySpace высоко, но достаточно подчеркнуть несколько серверов).

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

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

Это похоже на людей, которые сравнивают хит производительности нового () оператор по сравнению с Активатором. CreateInstance () в 1-10ms, когда единственное распространение в прямом и обратном направлениях DB обычно является более дорогим порядком величины.

я советовал бы Вам не волноваться о маленьком материале и концентрироваться на большом материале.

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

21
ответ дан chadmyers 27 November 2019 в 06:50
поделиться

Одна проблема с замком Windsor, с которым я столкнулся, состоит в том, что он не в состоянии работать в Среднем Доверии (без перекомпиляции, которую я не смог сделать). Таким образом, я должен был переключиться от Виндзора до Единицы.

Согласно производительности DI/МОК - я полагаю, что хит производительности не является большим особенно при учете питания, это имеет.

BTW: при начале с DI/МОК необходимо читать эта статья .

MSDN
10
ответ дан gius 27 November 2019 в 06:50
поделиться

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

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

7
ответ дан ima 27 November 2019 в 06:50
поделиться

Одно исключение, где производительность контейнера МОК недопустима, по моему опыту, при попытке интегрировать/обернуть контейнер МОК как IServiceProvider для использования в ComponentModel - как только типичный пример этого был при создании собственного размещенного разработчика winforms (обычно для создания некоторого пользовательского разработчика, т.е. рабочего процесса/блок-схемы и т.д.)

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

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

4
ответ дан Bittercoder 27 November 2019 в 06:50
поделиться

Относительно производительности см. эти статьи:

, Но помнит, что некоторые из этих контейнеров имеют более новый (и вероятно быстрее) версии - особенно Единица.

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

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