Как пружинная платформа помогает в разработке приложений?

То, что тестируется

LanguageRedux.js, имеет следующий экспорт:

  • LanguageTypes - карта типов действий
  • Creators - карта действий создателей
  • INITIAL_STATE - начальное состояние приложения
  • getLanguage и setLanguage - функции редуктора
  • reducer - redux reducer

Я рекомендую импортировать все с ожидаемыми идентификаторами, например:

import Creators, {
  LanguageTypes,
  INITIAL_STATE,
  getLanguage,
  setLanguage,
  reducer
 } from '../../../redux/LanguageRedux';

Примечание : похоже, действие getLanguage не нужно, поскольку оно ничего не делает для состояния (если приложение получает язык, оно должно просто читать его из состояния), но я оставлю это там, поскольку оно находится в коде вопроса.


LanguageTypes

LanguageTypes - это просто карта типов действий с их связанным строковым значением:

it('should export the expected action types', () => {
  expect(LanguageTypes).toEqual({
    GET_LANGUAGE: 'GET_LANGUAGE',
    SET_LANGUAGE: 'SET_LANGUAGE'
  });  // Success!
});

Создатели

[ 1115] - карта создателей действий.

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

describe('Creators', () => {

  describe('getLanguage', () => {

    it('should return the expected action', () => {
      expect(Creators.getLanguage()).toEqual({
        type: LanguageTypes.GET_LANGUAGE
      });
    });

    it('should ignore extra args', () => {
      expect(Creators.getLanguage('extra arg')).toEqual({
        type: LanguageTypes.GET_LANGUAGE
      });
    });

  });

  describe('setLanguage', () => {

    it('should return the expected action when passed nothing', () => {
      expect(Creators.setLanguage()).toEqual({
        type: LanguageTypes.SET_LANGUAGE
      });  // Success!
    });

    it('should return the expected action when passed a language', () => {
      expect(Creators.setLanguage('en')).toEqual({
        type: LanguageTypes.SET_LANGUAGE,
        language: 'en'
      });  // Success!
    });

    it('should ignore extra args', () => {
      expect(Creators.setLanguage('es', 'extra arg')).toEqual({
        type: LanguageTypes.SET_LANGUAGE,
        language: 'es'
      });  // Success!
    });

  });

});

INITIAL_STATE

INITIAL_STATE - это просто объект начального состояния, Приложение начинается с:

it('should set the initial state ', () => {
  expect(INITIAL_STATE).toEqual({ language: "en" });  // Success!
});

Функции редуктора

getLanguage и setLanguage являются функциями редуктора, то есть они являются чистыми функциями, которые возвращают новое состояние на основе существующего состояния. и действие, которое им дано:

describe('reducers', () => {

  describe('getLanguage', () => {

    it('should do nothing (probably should not be an action)', () => {
      expect(getLanguage(INITIAL_STATE, {})).toEqual(INITIAL_STATE);  // Success!
    });

    it('should ignore extra args', () => {
      expect(getLanguage(INITIAL_STATE, { extra: 'arg' })).toEqual(INITIAL_STATE);  // Success!
    });

  });

  describe('setLanguage', () => {

    it('should set the language', () => {
      expect(setLanguage(INITIAL_STATE, { language: 'es' })).toEqual({
        language: 'es'
      });  // Success!
    });

    it('should ignore extra args', () => {
      expect(setLanguage(INITIAL_STATE, { language: 'fr', extra: 'arg' })).toEqual({
        language: 'fr'
      });  // Success!
    });

  });

});

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


редуктор

reducer является редуктором-редуктором, и его задача - направить действия в соответствующую функцию редуктора и вернуть полученное состояние:

describe('reducer', () => {

  it('should return initial state if passed nothing', () => {
    expect(reducer()).toEqual(INITIAL_STATE);  // Success!
  });

  it('should route GET_LANGUAGE to getLanguage', () => {
    expect(reducer(INITIAL_STATE, Creators.getLanguage())).toEqual(INITIAL_STATE);  // Success!
  });

  it('should route SET_LANGUAGE to setLanguage', () => {
    expect(reducer(Immutable({ language: 'es' }), Creators.setLanguage('fr'))).toEqual({
      language: 'fr'
    });  // Success!
  });

});

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

Самая основная альтернатива - это шпионить за createReducer и просто проверять, что он был вызван с ожидаемым INITIAL_STATE и объектом сопоставления.

Подход на полпути между этим и полным подходом, описанным выше, состоит в том, чтобы смоделировать функции редуктора, выполнить reducer различные действия и убедиться, что была вызвана правильная функция редуктора. Вероятно, это идеальный подход , но трудно реализовать способ написания кода в настоящее время, поскольку createReducer запускается, как только код импортируется и захватывает ссылки на локальные функции setLanguage и [1128 ]. Если вы хотите использовать этот подход, то самый простой способ сделать это - переместить reducer в его собственный модуль, чтобы вы могли смоделировать функции редуктора перед тем, как импортировать reducer в свой тестовый код. [1155 ]

5
задан Gath 30 March 2009 в 05:45
поделиться

6 ответов

Существует много проектов Spring, но начальный Spring (POJO) проект появился из-за воспринятых трудностей работы с J2EE. Вы найдете много проектов на веб-сайте SpringSource, которые выросли из этого, а скорее, чем быть смешанным в одну платформу они проявили более модульный подход. Для всех продуктов они производят, см.:

http://www.springsource.org/projects

Q. Кто-то может сказать мне, как они использовали пружину для создания приложений?

Spring обеспечивает много функций, но наиболее часто используемый является внедрения зависимости. Это позволяет Вам соединять проводом вместе компоненты (например, Javabeans) путем объявления отношений в XML/Annotations. Контейнер Spring затем читает эту информацию и создает бобовую иерархию во времени выполнения. Стандартным способом описать бобы в XML является Контекст Приложения.

http://static.springframework.org/spring/docs/2.0.x/reference/beans.html

Q. Может кто-то указывать на меня на некоторые приложения реального мира, сделанные пружиной (iread где-нибудь, linkedin.com сделан с пружиной!

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

Q. Кто-то может сказать мне, как это соединяет, объединяются (Распорка, JavaScript, glassfish/jboss, апач, и т.д. и конечно пружина) для создания приложения?

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

http://www.ibm.com/developerworks/web/library/j-sr2.html

С Glasshfish/JBoss это больше о том, как Вы настраиваете свое приложение относительно Spring, а не сервера приложений. Посмотрите это:

http://static.springframework.org/spring/docs/2.5.x/reference/web-integration.html

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

например, веб-приложение состояло бы из Spring MVC + Бэкенд Spring. Настольное приложение - Java Swing + бэкенд Spring. С точки зрения самой платформы Spring (настроенный с XML) это включило бы:

  1. Создайте свои стандартные классы JavaBean (для СЕРВИСОВ/DTO/ДАО)

    общедоступный класс ExampleBean {

    private AnotherBean beanOne;
    private YetAnotherBean beanTwo;
    private int i;
    
    public ExampleBean(
        AnotherBean anotherBean, YetAnotherBean yetAnotherBean, int i) {
        this.beanOne = anotherBean;
        this.beanTwo = yetAnotherBean;
        this.i = i;
    }
    

    }

  2. Объявление бобов в файле контекста приложения

  3. Интегрируйте Spring со своим веб-приложением / приложение с помощью web.xml и т.д...

Они взяты из документов Spring btw... см.:

http://static.springframework.org/spring/docs/2.0.x/reference/beans.html

Q. Как легкий это должно произвести приложение, использующее пружинную платформу?

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

Надежда, которая помогает...

12
ответ дан 18 December 2019 в 10:49
поделиться
  1. Кто-то может сказать мне, как они использовали пружину для создания приложений?

Поместите БАНКИ Spring в свой ПУТЬ К КЛАССУ, следуйте за идиомой Spring (например, интерфейсы для формирования рисунка слоев), и используйте его для склеивания кода.

  1. Может кто-то указывать на меня на некоторые приложения реального мира, сделанные пружиной (iread где-нибудь, linkedin.com сделан с пружиной!

Вот тот. Выполнение в производстве теперь в течение трех лет и подсчета.

  1. Кто-то может сказать мне, как это соединяет, объединяются (Распорка, JavaScript, glassfish/jboss, апач, и т.д. и конечно пружина) для создания приложения?

Struts является одним выбором для яруса веб-узлов; JavaScript - что-то, что можно использовать для создания клиента динамичным; Glassfish/JBOSS/WebLogic/WebSphere/Tomcat/Spring DM является всем выбором сервера приложений для развертывания Вашего приложения Spring; Apache является веб-сервером HTTP; Spring и Ваш код идут на сервер приложений.

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

Вам нужны сервер приложений и вероятно база данных, браузер, Ваш код и Spring.

  1. Как легкий это должно произвести приложение, использующее пружинную платформу?

Насколько хороший программист Вы? Зависит от Вашего знания.

Spring, конечно, сделал мою жизнь легче, после того как я понял это.

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

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

1
ответ дан 18 December 2019 в 10:49
поделиться

Spring является довольно большой платформой, любому будет трудным суммировать все здесь. Я думаю, что самой большой плюс для использования Spring является своя поддержка внедрения зависимости. Это может использоваться в любом типе приложения и обеспечивает тонну функций платформы и утилит. Если бы Вам действительно интересно, я рекомендовал бы запуститься с документов о springsource.org:

http://www.springsource.org/documentation

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

1
ответ дан 18 December 2019 в 10:49
поделиться

Если Вы говорите о Struts и JavaScript одновременно, это означает, что Вы не знаете то, что Вы говорите о для веб-разработки в целом.

Что что? - У Вас есть платформы в Java, такие как Spring, Struts, и т.д. которые помогают Вам создать основанные на Java веб-приложения. Те Платформы Java обычно интегрируют сеть с инструментами ORM и другие технологии. - У Вас есть Контейнеры Сервлета, такие как Tomcat, Причал, и т.д. на котором можно запустить классические веб-приложения Java. Контейнеры J2EE, такие как JBoss, Glassfish встраивают Контейнер сервлета, такой как Tomcat и обеспечивают контейнер J2EE и иногда другие инструменты, для развертывания Корпоративных приложений Java.

Выбор Framework Choosing a Framework зависит от того, что Вы думаете об этом и как он соответствует Вашим потребностям. Например, почему Вы используете Django вместо TurboGears? Некоторые люди скажут Вам, что Django сосет, в то время как TurboGears качается и т.д.

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

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

Можно запустить с этого http://static.springframework.org/docs/Spring-MVC-step-by-step/. Это будет служить основной основой для Вас, и затем пружина огромна так в зависимости от того, что Вам нужны Вы, может исследовать пружину и использовать его.

Это работало на меня.

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

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