2010-01-18 91 views
3

我即将构建一个将拥有自己的引擎以及前端用户界面的系统。我想尽可能地解耦这两个。引擎应该能够接受命令和数据,能够处理这些数据并返回一些结果。引擎的工作可能很长,客户应该有能力随时查询引擎以了解其当前状态。关于应用程序体系结构的建议

一个分离的前端/后端系统是我的新领域,我不确定最好的架构。我希望前端是基于网络的。它将通过表单向引擎发送命令,并通过ajax调用显示引擎输出和当前状态。我可能会在Tomcat中使用基于Spring的Web应用程序。

我的问题涉及发动机部件的最佳结构。这些是我正在考虑的可能性:

  • 在web应用中实现引擎作为一组线程和数据结构。这里的优势是更简单的实现,并且Web应用程序前端和引擎之间的消息传递将很简单(只不过是一些共享数据结构)。缺点是前端和后端之间紧密耦合,依靠服务器容器管理引擎(例如,如果Web服务器或Web应用程序崩溃,引擎也会崩溃)。

  • 将后端实现为独立的Java应用程序,并通过TCP端口上的某些服务公开其功能。我喜欢这种方法,因为它与Web服务器分离。但是,我并没有对所需的低级网络/通信代码的数量感兴趣。我希望更高级别的消息传递,抽象插座等。

  • 使用OSGi容器,如Spring DM服务器来承载Web应用程序和引擎。这种方法很好,因为网络代码不存在。该引擎向OSGI容器公开服务以供Web应用程序使用。这里的缺点是新技术的学习曲线和开销:OSGi。此外,前端和后端保持耦合,我真的不想要。换句话说,我不能在任何旧的servlet容器上部署前端,它必须与引擎位于同一个OSGi容器中。

我有一种感觉,RMI是去这里的路,但同样这是一个新的技术领域对我来说,它仍然没有解释如何设计底层系统的体系结构。怎么样JMS?

谢谢你的任何建议。

回答

1

如果它将成为一个Web应用程序,那么就没有必要像进行桌面应用程序前端和服务器后端那样分离进程。所以保持简单。

我会使用(和我使用的一个项目,我目前的工作,因为它证明)的基础是这种堆栈:

  • 春3
  • Web容器
  • 应用部署为Web应用程序(WAR);
  • 对于持久性,无论是Ibatis(我的首选选项)还是JPA/Hibernate(如果您更喜欢更多的对象持久性方法);
  • 您的首选Web框架。这里没有简单的答案,有几十种可供选择,从直接模板到更多组件化(JSF,Seam等)。挂毯/ Wicket看起来很有趣,但我也不是专家。

Spring容器完全能够启动一系列线程,这样做很常见。所以你需要的是一系列组件,它们只是你的引擎。除非您有充分的理由否则,否则Web应用程序上下文中的Spring bean将变得简单,灵活且功能强大。

在前端它取决于你想要什么。直接的HTML可以用任何Web框架完成。即使通过一些Javascript装饰。我使用jQuery来处理这种事情。

如果您希望前端看起来像桌面应用程序(即所谓的“丰富”UI),它只会有所不同。为此,您需要使用Google Web Toolkit(“GWT”),可能是像JSF这样的组件Web框架(尽管我倾向于认为它们真的很快得到真正的混乱),或者像ExtJS,SmartClient,YUI这样的Javascript框架,还是公平的新的Uki。

1

如果您将后端编写为服务,并建立XML或JSON消息格式以在客户端和服务之间传递,那么您将分离您的UI。

克里斯特的其余评论可以适用于后端,但客户端可以很幸福地没有意识到它。它甚至可以成为所有人关心的.NET实现。重点在于用例和消息,而不是后端实现。

在使用非基于HTML的UI(例如Flex)的情况下,这也会很有用。

2

如果您确实想要解耦Web应用程序和引擎,您还可以将引擎部署到不同的服务器中,并将API作为Web服务调用(WS- *或REST)公开。

+0

+1推荐REST – medopal 2010-01-18 07:18:18

相关问题