【问题标题】:Application Architecture Design Question应用架构设计问题
【发布时间】:2010-12-17 20:20:21
【问题描述】:

在设计基于 Java/J2EE Web 的应用程序时,我需要您的建议。以下是它的特点:

  1. 纯面向数据库的应用程序(有 10 个表)。数据库是 Oracle。
  2. 三种不同类型的界面/屏幕: 2.1 WebSphere Portlet(6 个界面/屏幕) 2.2 手持设备(5个接口/屏幕) 2.3 Web 应用(17 个界面/屏幕)
  3. 很少有屏幕只是使用 Crystal Reports 构建的报表。
  4. 不涉及太多业务逻辑。

现在我担心的是:

  1. 我应该选择 2 层还是 3 层的架构?
  2. 我应该使用哪些框架/struts/jsf (MVC)?如果有的话?或者我应该选择没有任何框架的简单的基于 POJO 的编程。
  3. 最大的担忧是打包,我的意思是我不想为我想要开发的每三种不同类型的接口复制业务和数据库层。您认为 EJB 是公开 DB/业务层的好选择吗?我该如何处理?
  4. 我应该使用任何特定的框架,如 sitemash 作为表示层吗?
  5. 我应该使用任何特定的数据库层 JPA/Hibernate 框架还是应该使用简单的 JDBC?

欢迎任何cmets/建议...

BR SC

【问题讨论】:

  • 您打算为手持设备开发应用程序吗?或者您可以在其中使用网络应用程序?
  • 我想在它们中使用相同的 web 应用程序,但问题是表示层如何足够动态以根据设备类型呈现界面?有没有提供这个功能的框架?
  • 如果您使用 Spring,无论 UI 技术如何,您的 Web 控制器都将使用相同的后端。让控制器确定他们正在处理的客户端类型,并找出适合发送的客户端。

标签: java architecture jakarta-ee


【解决方案1】:

我应该为 2 层还是 3 层选择哪种架构?

三层:视图、服务和持久性。

我应该使用哪些框架 支柱/jsf(MVC)?如果有的话?或者应该 我选择基于简单的 POJO 没有任何框架的编程。

支柱?不,JSF?不,我推荐 Spring,因为它支持 Web 和门户 MVC 以及契约优先的 Web 服务。

最关心的是包装,我 意思是我不想复制 每个业务层和数据库层 三种不同类型的接口 我想发展。你认为 EJB 将是曝光的好选择 数据库/业务层?我该怎么办 处理这个?

我不会推荐 EJB。我建议使用基于 HTTP 的 Web 服务进行远程处理。

我应该使用任何特定的框架吗 像用于演示的网站 层?

Sitemesh 很好,但它不是表示层。

我会使用 Velocity 模板生成直接的 HTML,然后发回给客户。

我应该使用任何特定的框架吗 对于数据库层 JPA/Hibernate 或 我应该使用简单的 JDBC 吗?

十张桌子?该架构足够小,以至于 JPA 和 Hibernate 对我来说似乎有点矫枉过正。为您的持久层创建一个 POJO 接口,您可以将实现与客户端隔离。从简单开始,如果您决定需要或想要切换它。

【讨论】:

  • 我需要澄清一下。让我们使用“层”这个词而不是“层”。因为这将只是逻辑分离。好的,假设我选择 Spring。但是我很困惑,那我该如何分离三层呢? Spring 将属于哪个特定层?如果我将拥有三个单独的包,假设每一层都有一个,那么 Spring 会给我带来什么优势?谢谢BR SC
  • portlet 应用程序将在单独的服务器中运行。那么,您认为我应该将服务和数据库层公开为 Web 服务以避免代码重复?
  • 你是如何得到分离的? Easy - 用于服务和持久性的 POJO 接口。 Spring 是一个使用面向方面编程的依赖注入引擎(对象工厂)。它有帮助实现的模块,包括 JDBC 和 Hibernate,并将整个事情粘合在一起。春天会给你很大的提升。
  • 不,数据库不会作为服务公开。客户端将通过服务访问数据库。这使您可以更改身份验证和授权用户以及绑定和验证数据。这种方式没有 SQL 注入攻击。可以使用您选择的任何技术远程公开服务:SOAP、REST、EJB、RPC、HTTP、Hessian、Burlap - 所有这些都受 Spring 支持。如果您从 POJO 接口开始,您可以将远程技术的选择推迟到以后。这将使您的服务更易于测试。
  • 看来 Spring 是个不错的选择。但是我现在拥有的团队在 Struts 方面经验丰富,不幸的是我没有太多时间在 Spring 上训练他们。我正在考虑使用 Struts,但我仍然对如何打包我的应用程序以部署在 websphere 应用程序服务器(web 用户)和 websphere 门户服务器(门户用户)上感到困惑?
【解决方案2】:

我认为第一个答案有很好的基线。我会回应大部分观点,但另外推荐jDBI 用于数据库访问(参见tutorial);与“原始”JDBC 相比,它很好地简化了处理,但不需要任何映射。

【讨论】:

  • 感谢您的回复。学习曲线有多快?鉴于该团队是 JDBC 专家...
  • 在我看来,它是一个非常简单易用的库——有点像自动化团队经常为其编写自己的辅助方法(关闭连接、参数绑定)的事情。主要挑战是 lib 没有被广泛记录。所以有了一些 JDBC 知识使用应该是轻而易举的事。
猜你喜欢
  • 1970-01-01
  • 2011-11-20
  • 1970-01-01
  • 2010-10-04
  • 1970-01-01
  • 2011-07-04
  • 2015-08-29
  • 2016-03-26
  • 2011-03-11
相关资源
最近更新 更多