【问题标题】:MVC and Java Web Design: Model structureMVC 和 Java 网页设计:模型结构
【发布时间】:2013-09-11 21:04:28
【问题描述】:

美好的一天,我的情况如下:我正在使用 java 设计一个小型 Web 系统,我在该领域的知识非常有限(主要来自小型教程和 Head and First Servlets 和 JSP Book),结果产生了结果以及关于如何进行良好(和高效)设计的无休止的疑问,唯一 100% 清楚的是 MVC 是必须的(至少在我的情况下)。

阅读此this 后,我大致了解了系统应该如何完成。如何实现视图和控制器(以及它们应如何通信)变得清晰。

现在,我的问题在于 MVC 模式的模型部分。 Java Beans 和 DAO 类应该在这里使用吧?我的应用程序将主要有 CRUD 操作(整个系统中只需要 2 - 3 个额外的数据操作)所以,我应该做 N(我需要访问的表数为 N)Java Bean 对象和 N DAO只有那些具有以下结构的 CRUD 操作的类?

Java Bean:

 public class TableJB{ 
     // Table attributes with their respective getters and setters
 }

道:

 public class TableJB{ 
     public static void create(TableJB jb){}
     public static TableJB read(int id){}
     public static void update(TableJB jb){}
     public static void delete(int id){}
     public static List<TableJB> listAll(){}
 }

我看到这种结构的问题是我将在这些方法中的每一个中进行连接管理(打开和关闭),在我看来这似乎是错误的(好像应该由其他人处理这些)而且我很远从确定这是否是更好的做法。另外我想知道是否应该在将数据写入数据库之前重新验证数据,以防客户端验证由于某种原因被禁用(例如:通过禁用 JavaScript)?

作为重要说明:我不允许为我的解决方案使用任何框架(所以不能使用 Spring、Hibernate 等)。

【问题讨论】:

  • 如果我只是在一个类中将它们作为您刚刚链接的 DatabaseConnectivity 示例返回,将来会不会出现未关闭的连接问题?
  • 我想知道我是否应该在将数据写入数据库之前重新验证数据,以防客户端验证由于某种原因被禁用(例如:通过禁用 JavaScript)验证必须在服务器端完成,而不是在客户端。
  • 不,数据库连接池处理这个。我之前解释过:How to properly keep a DB connection from a Connection Pool opened in JBoss。该原则适用于任何体面的连接池,我假设您将使用的应用程序服务器已经有一个:)
  • 您能详细说明为什么不允许您使用框架吗?这是家庭作业,还是不向项目添加新依赖项的问题,还是什么?你可以使用什么?

标签: java design-patterns dao


【解决方案1】:

首先,您必须在服务器端进行用户输入验证。正如您所说,可以禁用客户端 javascript,因此您不能仅依赖它。客户端验证应被视为推荐但可选的额外内容。

对于您的业务模型和数据库模型,您最好分开考虑这两件事。例如,我会考虑我所有的业务数据,然后遵循面向对象的设计原则并提出一个可靠的类图。作为一项单独的活动,我将遵循数据规范化的原则并提出关系数据库模型 (ERD)。这两个数据模型可能(并且可能应该)看起来彼此不同。最后一步是将 DAO 层设计为两个数据模型之间的桥梁——它可能看起来像两个模型的混合体。一旦我完成了这三部分的草稿,我会继续迭代和改进。

通常,您将为每个 CRUD 操作打开和关闭数据库连接 - 使用数据库连接池来解决性能问题 - http://wiki.metawerx.net/wiki/DatabaseConnectionAndPoolingQuestions

【讨论】:

    【解决方案2】:

    毫无疑问,在开始编码之前,您应该使用软件工程主体来构建解决方案。 Hibernate 是包括打开和关闭连接在内的大量代码重写的解决方案。在连接池中,您需要手动获取和释放连接。

    【讨论】:

    • 正如我所说,在我的解决方案中禁止使用框架(如 Hibernate)。
    猜你喜欢
    • 1970-01-01
    • 2013-02-20
    • 2010-09-20
    • 1970-01-01
    • 1970-01-01
    • 2012-01-17
    • 2011-05-31
    • 1970-01-01
    • 2013-05-20
    相关资源
    最近更新 更多