Я собираюсь создать систему, которая будет иметь свой собственный движок, а также интерфейс пользователя. Я бы хотел как можно больше отделить эти два. Двигатель должен иметь возможность принимать команды и данные, иметь возможность работать с этими данными и возвращать некоторый результат. Работы для двигателя могут быть длинными, и клиент должен иметь возможность запросить двигатель в любое время для его текущего состояния.Советы по архитектуре приложения
Разграничительная интерфейсная/задняя система - это новая территория для меня, и я не уверен в лучшей архитектуре. Я хочу, чтобы интерфейс был основан на веб-интерфейсе. Он будет отправлять команды движку через формы и отображать вывод двигателя и текущий статус, через все вызовы ajax. Я, скорее всего, буду использовать веб-приложение Spring в Tomcat.
Мой вопрос включает в себя лучшую конструкцию для компонента двигателя. Это возможности, которые я рассматриваю:
Внедрите двигатель как набор потоков и структур данных в веб-приложении. Преимущества здесь были бы более простой реализацией, и обмен сообщениями между интерфейсом веб-приложения и движком был бы простым (не что иное, как некоторые общие структуры данных). Недостатками были бы плотная связь между передним и задним концами, зависимость от контейнера сервера для управления движком (например, если веб-сервер или веб-приложение разбился, так же как и двигатель).
Внедрите задний конец как автономное приложение Java и выставляйте его функции через некоторую службу на TCP-порту. Мне нравится этот подход, потому что он отделен от веб-сервера. Тем не менее, я не уверен в количестве требуемого низкоуровневого сетевого/коммуникационного кода. Я бы предпочел более высокий уровень передачи сообщений, который аббревиатурами Sockets и т. Д.
Используйте контейнер OSGi, такой как Spring DM server для размещения как веб-приложения, так и движка. Этот подход хорош, поскольку сетевой код не существует. Двигатель предоставляет услуги контейнеру OSGI для использования веб-приложением. Недостатком здесь является кривая обучения и накладные расходы по новой технологии: OSGi. Кроме того, передняя и задняя части остаются снова связанными, которых я действительно не хочу. Другими словами, я не мог развернуть интерфейс на любом старом контейнере сервлета, он должен быть в том же контейнере OSGi, что и движок.
у меня есть чувство РМО путь здесь, но опять-таки это новая область техники для меня, и это еще не объясняет, как проектировать архитектуру основных систем. Как насчет JMS?
Благодарим за любые советы.
+1 для рекомендации ОТДЫХА – medopal