美好的一天,我的情况如下:我正在使用java设计一个小型的Web系统,我在这个领域的知识非常有限(主要来自小教程和Head和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
}
DAO:
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等)。
答案 0 :(得分:1)
首先,您必须在服务器端进行用户输入验证。正如您所说,客户端javascript可以被禁用,因此您不能单独依赖它。客户端验证应该被视为推荐的,但是可选的,额外的。
对于您的商业模式和数据库模型,您可能会分别考虑这两件事。例如,我会考虑所有业务数据,然后遵循面向对象的设计原则,并提出一个可靠的类图。作为一项单独的活动,我将遵循数据规范化的原则,并提出关系数据库模型(ERD)。这两种数据模型可能(并且可能应该)彼此看起来不同。最后一步是将DAO层设计为两个数据模型之间的桥梁 - 它可能看起来像两个模型的混合体。一旦我对这三个部分进行了草拟,我就会继续进行迭代和改进。
通常,您将为每个CRUD操作打开和关闭数据库连接 - 使用数据库连接池来解决性能问题 - http://wiki.metawerx.net/wiki/DatabaseConnectionAndPoolingQuestions
答案 1 :(得分:0)
当然,在开始编码之前,您应该使用软件工程主体来构建解决方案。 Hibernate是大量重写代码的解决方案,包括开放和关闭连接。在连接池中,您需要手动获取和释放连接。