应用架构建议

3
我即将构建一个系统,该系统将拥有自己的引擎和前端用户界面。我希望尽可能地解耦这两个部分。引擎应该能够接受命令和数据,能够处理这些数据并返回一些结果。引擎的工作可能很长,客户端应该能够随时查询引擎的当前状态。
对于我来说,解耦前端/后端系统是新领域,我不确定最佳架构。我想让前端基于Web。它将通过表单向引擎发送命令,并通过ajax调用显示引擎输出和当前状态。我很可能在Tomcat中使用基于Spring的Web应用程序。
我的问题涉及引擎组件的最佳结构。这些是我正在考虑的可能性:
1. 在Web应用程序中实现引擎作为一组线程和数据结构。这里的优点是更简单的实现,前端和引擎之间的消息传递将很简单(仅仅是一些共享的数据结构)。缺点是前端和后端之间的紧密耦合,依赖于服务器容器来管理引擎(例如,如果Web服务器或Web应用程序崩溃,引擎也会崩溃)。
2. 将后端实现为独立的Java应用程序,并通过某个TCP端口公开其功能。我喜欢这种方法,因为它与Web服务器解耦。但是,我对所需的低级网络/通信代码量不是很满意。我更喜欢一些更高级别的消息传递,可以抽象出套接字等。
3. 使用像Spring DM Server这样的OSGi容器来托管Web应用程序和引擎。这种方法很好,因为网络编程代码不存在。引擎向OSGI容器公开服务,供Web应用程序使用。这里的缺点是需要学习新技术:OSGi的学习曲线和开销。另外,前端和后端再次耦合在一起,这并不是我想要的。换句话说,我无法将前端部署在任何旧的servlet容器中,它必须与引擎在同一个OSGi容器中。
我觉得RMI可能是此处的最佳选择,但是这仍然是我不熟悉的新技术领域,而且它仍然无法解释如何设计底层系统的架构。JMS呢?
感谢您提供的任何建议。
3个回答

2
如果你真的想要解耦网络应用程序和引擎,你也可以在不同的服务器上部署引擎,并将API公开为Web服务调用(WS-*或REST)。

1
如果它将成为Web应用程序,就没有必要像桌面应用程序前端和服务器后端那样解耦进程。所以保持简单。
我会使用以下基础(正如我目前正在工作的项目所使用的):
- Spring 3 - Web容器 - 应用程序部署为Web应用程序(WAR); - 对于持久性,可以选择Ibatis(我首选)或JPA / Hibernate(如果您更喜欢对象持久性方法); - 您喜欢的Web框架。这里没有简单的答案,有数十种选择,从直接模板到更组件化的框架(JSF,Seam等)。Tapestry / Wicket看起来很有趣,但我对两者都不是专家。
Spring容器完全能够启动一系列线程,这是非常常见的。因此,您需要一系列组件,这些组件将简单地成为您的引擎。除非您有充分的理由采取其他措施,否则Web应用程序上下文中的Spring bean是简单,灵活且强大的。

在前端方面,这取决于你想要什么。纯HTML可以使用任何Web框架来完成,即使添加了一些Javascript。我通常使用jQuery来处理这种情况。

只有当你希望前端看起来像一个桌面应用程序(所谓的“富”用户界面)时,情况会稍有不同。为此,你可以使用Google Web Toolkit(“GWT”),或者可能是像JSF这样的组件Web框架(尽管我倾向于认为这些会变得非常混乱),或者像ExtJS、SmartClient、YUI或相对较新的Uki这样的Javascript框架。


1
如果你把后端写成服务,建立一个XML或JSON消息格式用于客户端和服务之间的传递,那么你就可以解耦你的UI界面。
Cletus所说的关于后端的其他所有评论都可以成立,但客户端可以毫不知情。它甚至可以是.NET实现,只要它关注使用案例和消息即可,而不是后端实现。
这也在那些使用非基于HTML的UI时(如Flex)非常有用。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接