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

<% @feed.sort_by{|t| - t.created_at.to_i}.first(10).each do |feed| %>

Тем не менее, вероятно, лучше опустить это в модель, подобную этой

<% @feed.recent(10).each do |feed| %>

И, на самом деле, если @feed выйдет из базы данных, я бы опустил ее вниз. еще дальше: нет смысла загружать тонну несортированных записей фидов из БД, затем сортировать их и затем выбрасывать большинство из них. Лучше пусть БД сделает сортировку и фильтрацию.

См. Ответ @Peer Allan о том, как это сделать, в ActiveRecord. В ARel (IOW: Rails 3), вероятно, было бы еще проще, что-то вроде

Feed.all.order('created_at DESC').take(10)
5
задан Robert Munteanu 12 June 2009 в 11:18
поделиться

4 ответа

Я обнаружил, что следующее может быть полезным:

  1. разделите ваши конфигурации Spring на несколько автономных конфигураций и используйте средство импорта Spring для импорта зависимостей конфигурации (см. здесь , раздел 3.2.2.1). Таким образом, у вас есть набор конфигураций, которые вы можете комбинировать или дизассемблировать по мере необходимости, и все они являются независимыми (все зависимости будут явными и ссылаться на них)
  2. Используйте среду IDE, поддерживающую Spring и позволяющую вам перемещаться по конфигурациям с помощью point-n-click на beans (ссылки / имена, исходный код и обратно). Intellij очень хорошо работает с этим (я думаю, версия 7 и выше). Я подозреваю, что Eclipse сделает нечто подобное.
  3. Измените , что вы вводите , где . Вы можете выполнить рефакторинг нескольких инъекций bean-компонентов в один составной или «мета» bean-компонент или более крупный компонент. Или вы можете обнаружить, что компоненты, которые вы когда-то думали, что вам нужно внедрить, никогда не менялись или никогда не требовали такой инъекции (для тестирования, реализации в качестве стратегий и т. Д.)

Раньше я работал с огромной установкой Spring с сотнями ( тысячи?) фасоли. Разделение конфигураций на части сделало жизнь намного более управляемой и упростило тестирование / создание автономных процессов и т. Д. Но я думаю, что интеграция Intellij Spring, которая шла с Intellij, имела наибольшее значение. Наличие интегрированной среды разработки с поддержкой Spring позволяет значительно сэкономить время.

или никогда не требовал этой инъекции (для тестирования, реализации в качестве стратегий и т. д.)

Раньше я работал с огромной установкой Spring с сотнями (тысячами?) bean-компонентов. Разделение конфигураций на части сделало жизнь намного более управляемой и упростило тестирование / создание автономных процессов и т. Д. Но я думаю, что интеграция Intellij Spring, которая шла с Intellij, имела наибольшее значение. Наличие интегрированной среды разработки с поддержкой Spring позволяет значительно сэкономить время.

или никогда не требовал этой инъекции (для тестирования, реализации в качестве стратегий и т. д.)

Раньше я работал с огромной установкой Spring с сотнями (тысячами?) bean-компонентов. Разделение конфигураций на части сделало жизнь намного более управляемой и упростило тестирование / создание автономных процессов и т. Д. Но я думаю, что интеграция Intellij Spring, которая шла с Intellij, имела наибольшее значение. Наличие интегрированной среды разработки с поддержкой Spring позволяет значительно сэкономить время.

4
ответ дан 18 December 2019 в 13:18
поделиться

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

Пример:


<beans>
  <!-- Scans service package looking for @Service annotated beans -->
  <context:component-scan base-package="my.root.package.service"/>

</beans>

Ваши классы обслуживания должны быть аннотированы по порядку для автоматического сканирования:


package my.root.package.service;

@Service("fooService") public class FooServiceImpl implements FooService{

}

Вы также можете использовать аннотацию @Autowired, чтобы сообщить Spring, как внедрять зависимости bean-компонентов:


package my.root.package.service;

@Service("barService")
public class BarServiceImpl implements BarService{
    //Foo service injected by Spring
    @Autowired
    private FooService fooService;

    //...
}

6
ответ дан 18 December 2019 в 13:18
поделиться

Как говорит @Wilson Freitas, используйте автоматическое подключение. Я ежедневно работаю с системой, в которой есть несколько тысяч Spring управляемых bean-компонентов, использующих в основном autowired. Но я думаю, что понятие «сохранение общей картины» немного неуместно. По мере роста системы вы не можете ожидать, что будете делать это так же, как и в меньшей системе. Использование @Autowiring вынуждает вас использовать более строгую типизацию, чем Spring, основанный на xml, что снова означает, что вы можете использовать функции отслеживания зависимостей вашей IDE для навигации по зависимостям.

Я действительно считаю неоптимальным думать, что вам нужно , чтобы понять "полную" картину, когда дело доходит до конфигурации пружины. Вы должны сосредоточиться на своем коде и его зависимостях. Управляемость и ремонтопригодность достигаются за счет хорошей организации этого кода, правильно называть вещи и управлять своей связью; все, что применимо, даже если вы не используете Spring. Spring не должен сильно меняться, и с одобрения JSR-330 может даже показаться, что внедрение зависимостей будет продвигаться дальше «под капот» среды выполнения.

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

Наша стратегия:

  • соглашения об именах , например: fooService, fooDao, fooController;
  • установщики свойств, следующие этим соглашениям;
  • автоматическое подключение по имени (autowire = "по имени"); у нас было много проблем с автоматическим подключением по типу, особенно на уровне контроллера
1
ответ дан 18 December 2019 в 13:18
поделиться
Другие вопросы по тегам:

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