2015-09-19 4 views
2

У нас есть класс и способ запуска приложения. Первоначально у него было очень мало кода.Разработка кода запуска приложения

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

Я думаю, что этот метод метода должен выполнять код жизненного цикла запуска приложения только для обычного кода, который требуется приложению (создание db, начало ведения журнала и т. Д.), А не какой-либо код домена/требования.

Пара способов я могу думать:

шаблон Observer/на основе событий/OSGI точки расширения, как модель: Application событие запуска обжигают с помощью этого метода нанесения. Все слушатели домена должны выполнить свой код. Но здесь важны порядок и зависимости между кодом слушателей.

Делегированные методы в области конкретного кода Опять же это можно было бы увеличить массу прямого вызова домена определенного кода последовательно (поддерживает порядок) от стартового кода (который вроде происходит в моем коде)

Would Как узнать, есть ли другой способ решить эту проблему?

веселит,

Saurav

+0

Похоже, вам не хватает контейнера [IoC] (https://en.wikipedia.org/wiki/Inversion_of_control), чтобы вводить зависимые от домена зависимости и управлять их жизненными циклами. – jaco0646

+0

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

ответ

1

Честно говоря, те два, был бы один, я бы исследовать.

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

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

Другие аспекты для рассмотрения были бы:

  • Как легко протестировать процесс инициализации работает, как ожидалось?
  • Насколько легко следовать тому, что происходит в коде?
+0

большое спасибо за ваши входы ... так что вы означает, что должен быть порядок выполнения слушателей для запуска, как событие должно быть определено? – saurav

+0

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

1

Я хотел бы начать использовать интерфейс для моделирования жизненного цикла приложений вы говорите:

interface IApplicationLifecycle 
{ 
    void Startup(); 
    void Shutdown(); 
} 

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

// populate LifecycleCollection (could maintain order there if needed) 
public void Start() 
{ 
    foreach (IApplicationLifecycle al in LifecycleCollection) 
    { 
     al.Startup(); 
    } 
} 

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

+0

спасибо за ваши входы Кен – saurav

Смежные вопросы