2010-01-18 2 views
3

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

Разграничительная интерфейсная/задняя система - это новая территория для меня, и я не уверен в лучшей архитектуре. Я хочу, чтобы интерфейс был основан на веб-интерфейсе. Он будет отправлять команды движку через формы и отображать вывод двигателя и текущий статус, через все вызовы ajax. Я, скорее всего, буду использовать веб-приложение Spring в Tomcat.

Мой вопрос включает в себя лучшую конструкцию для компонента двигателя. Это возможности, которые я рассматриваю:

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

  • Внедрите задний конец как автономное приложение Java и выставляйте его функции через некоторую службу на TCP-порту. Мне нравится этот подход, потому что он отделен от веб-сервера. Тем не менее, я не уверен в количестве требуемого низкоуровневого сетевого/коммуникационного кода. Я бы предпочел более высокий уровень передачи сообщений, который аббревиатурами Sockets и т. Д.

  • Используйте контейнер OSGi, такой как Spring DM server для размещения как веб-приложения, так и движка. Этот подход хорош, поскольку сетевой код не существует. Двигатель предоставляет услуги контейнеру OSGI для использования веб-приложением. Недостатком здесь является кривая обучения и накладные расходы по новой технологии: OSGi. Кроме того, передняя и задняя части остаются снова связанными, которых я действительно не хочу. Другими словами, я не мог развернуть интерфейс на любом старом контейнере сервлета, он должен быть в том же контейнере OSGi, что и движок.

у меня есть чувство РМО путь здесь, но опять-таки это новая область техники для меня, и это еще не объясняет, как проектировать архитектуру основных систем. Как насчет JMS?

Благодарим за любые советы.

ответ

1

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

Основа Я хотел бы использовать (и я использую для проекта, над которым я работаю в настоящее время, как выясняется) этот вид стека:

  • Spring 3
  • Web контейнера
  • Применение развернуто как веб-приложение (WAR);
  • Для настойчивости, либо Ibatis (мой предпочтительный вариант), либо JPA/Hibernate (если вы предпочитаете более подход к сохранению объектов);
  • Ваш предпочтительный выбор веб-фреймворка. Здесь нет простого ответа, и есть десятки на выбор: от прямого шаблона до более детализированного (JSF, Seam и т. Д.).Гобелен/калитка выглядят интересными, но я тоже не специалист.

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

На переднем конце это зависит от того, что вы хотите. Прямой HTML можно сделать с любой веб-картой. Даже если украшено некоторым Javascript. Я использую jQuery для такого рода вещей.

Это только немного отличается, если вы хотите, чтобы передняя часть выглядела как настольное приложение (так называемый «богатый» интерфейс). Для этого вам нужно либо использовать Google Web Toolkit («GWT»), возможно, компонентную веб-инфраструктуру, такую ​​как JSF (хотя я склонен думать, что они становятся действительно беспорядочными) или инфраструктуру Javascript, такую ​​как ExtJS, SmartClient, YUI или довольно новый Уки.

1

Вы отделите свой интерфейс, если вы напишете свой задний конец как службы, и установите формат сообщения XML или JSON для передачи между клиентом и службами.

Все остальные комментарии cletus могут быть верны для заднего конца, но клиент может быть блаженно не осведомлен о нем. Это может быть даже реализация .NET для всего, что она заботится. Основное внимание уделяется случаям использования и сообщениям, а не реализации на заднем конце.

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

2

Если вы действительно хотите отделить веб-приложение и движок, вы также можете развернуть движок на другом сервере и выставить API в качестве вызовов веб-службы (WS- * или REST).

+0

+1 для рекомендации ОТДЫХА – medopal