почему Spring использует XML для проводного соединения компонента?

Короче говоря - да. Они стоят каждой унции усилия... к точке. Тесты, в конце дня, все еще кодируют, и во многом как типичный рост кода, Ваши тесты должны будут в конечном счете быть пересмотрены, чтобы быть удобными в сопровождении и устойчивыми. Существует тонна ГЛЮКОВ! когда дело доходит до поблочного тестирования, но человека, о, человек, о, человек, ничто, и я подразумеваю, что НИЧТО не уполномочивает разработчика вносить изменения более уверенно, чем богатый набор модульных тестов.

я работаю над проектом прямо сейчас...., это - несколько TDD, и у нас есть большинство наших бизнес-правил encapuslated как тесты..., у нас есть приблизительно приблизительно 500 модульных тестов прямо сейчас. Это прошлое повторение я должен был обновить наш источник данных и как наше настольное приложение взаимодействует через интерфейс с тем источником данных. Взял меня пара дней, всего времени, я просто продолжал управлять модульными тестами для наблюдения то, что я повредил и зафиксировал ее. Внесите изменение; Сборка и запущенный Ваши тесты; зафиксируйте то, что Вы повредили. Промывка, Промывка, Повторение по мере необходимости. Что традиционно заняло бы дни QA, и грузоподъемность судна напряжения был вместо этого короткий и приятный опыт.

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

я купил эту книгу - это - Библия xUnit Тестирование знания - это, вероятно, одна из книг, на которые наиболее ссылаются, по моей полке, и я ежедневно консультируюсь с ним: текст ссылки

5
задан janetsmith 14 July 2009 в 10:13
поделиться

7 ответов

Это в основном подход, который использует Guice , да.

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

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

8
ответ дан 18 December 2019 в 09:52
поделиться

Я бы сказал, что Spring предпочитает XML над Java, потому что два языка предназначены для двух разных задач. Java - это язык программирования. Его цель - описать алгоритмы, программы, поток управления и т. Д. Если выведение структуры вашей программы требует сложного потока управления, хорошим выбором будет Java.

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

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

<book>
  <chapter>It was the best of times, it was the worst of times</chapter>
</book>

public static void main(String[] args)
{
    String chapter1 = BookXMLParser.loadChapter(1);
    System.out.println(chapter1);
}

, очевидно, также можно было бы полностью выполнить на Java:

public static void main(String[] args)
{
    String chapter1 = "It was the best of times, it was the worst of times");
    System.out.println(chapter1);
}

Теперь, очевидно, это смешной пример. Книги состоят из сотен страниц. Было бы глупо хранить их в Java-коде. Однако я бы сделал тот же аргумент для конфигурации Spring. В одной из моих самых больших программ есть Spring XML, который насчитывает многие тысячи строк.

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

Опять же, есть и некоторые недостатки. . Разрешение вам делать эту конфигурацию в Java позволяет программисту делать всевозможные неприятные вещи, которые значительно труднее достичь в XML, например:

bean1.setName("fred");
if( System.currentTimeMillis() > 1234567890l ) {
   //Automatically use new feature after next Thursday
   bean1.setNewFeature(1);
} else if( x > 17 ) {
  switch(y) {
   case POTATO:
     bean1.setNewFeature(0);
     break;
   case POTAHTO:
     bean1.setNewFeature(1);
   case WHO_COULD_ASK_FOR_ANYTHING_MORE_FALLTHROUGH:
     bean1.setFoo(bar);
     break;
   default:
     baz? bean1.setBar(baz) : if(17 > t) 
         { bean1.setNewFeature(q) } else {
          throw new RuntimeException("That's odd...");
         }
  }
}

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

2
ответ дан 18 December 2019 в 09:52
поделиться

Ознакомьтесь с Spring JavaConfig .

5
ответ дан 18 December 2019 в 09:52
поделиться

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

3
ответ дан 18 December 2019 в 09:52
поделиться

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

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

Это один и тот же аргумент для всех конфигураций. Вы можете сделать все это в коде. Но когда это уместно?

0
ответ дан 18 December 2019 в 09:52
поделиться

Подключение ваших bean-компонентов таким образом

HelloWorld helloWorld = new HelloWorld();
helloWorld.setMessage("HelloWorld");
helloWorld.display();

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

Но что, если у вас есть более сложная среда, в которой у вас есть десятки или сотни бобов весной? В моем текущем приложении около 205 bean-компонентов, отображенных примерно в четырех разных XML-файлах. Соединить их в коде было бы кошмаром.

-1
ответ дан 18 December 2019 в 09:52
поделиться

«Я понимаю концепцию IOC, которую мы можем смешивать и сопоставлять различные классы, использующие проводку ».

Как может быть так, что вы утверждаете, что с одной стороны понимаете концепцию IoC, а на следующем вздохе предлагаете пример« привет, мир », в котором ничего из этого не используется? Я не понимаю.

XML не на 100% необходим. Даже Spring теперь дает возможность использовать в основном аннотации. Меняют ли они ваше мнение?

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

ОБНОВЛЕНИЕ: Вам придется уйти. назад и спросите Рода Джонсона, почему он выбрал XML, но его легко защитить. Когда он разрабатывал идею для своих консалтинговых выступлений примерно в 2000–2002 гг., Широко использовался XML.

Spring использует XML для экстернализации конфигурации, но вы можете использовать аннотации, если у вас Spring 2.5 или выше.

Ваш вопрос сбивает меня с толку, потому что приведенный вами пример с использованием кода Java вообще не является IoC. Когда вы так называете new, вы ничего не подключаете. Я бы рекомендовал вернуться и еще раз прочитать статью Мартина Фаулера о IoC: http://www.martinfowler.com/articles/injection. html

0
ответ дан 18 December 2019 в 09:52
поделиться
Другие вопросы по тегам:

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