我在java中的第一个项目将是一个程序(最终我必须创建一个GUI界面,但现在CLI会这样做)来跟踪我的书(类似于库只有一个更简单的东西)。 我需要能够插入,更新,删除,显示所有书籍,更新,搜索(按名称或作者或日期)。
对于设计我正在考虑一个主类库,它将具有连接到数据库并检索数据的所有上述方法。
这种方法可以吗?我意识到这很简单,但这是我的第一个真正的项目,我希望得到一些反馈。
此外,考虑阅读设计模式和数据库设计还为时尚早吗?
答案 0 :(得分:5)
您想要查找DAO (Data Access Object)模式。
首先,创建一个代表一本书的Javabean类(也称为实体)。
public class Book {
private Long id;
private String title;
private String author;
private Date date;
// Add/generate c'tor/getter/setter/hashcode/equals/tostring boilerplate.
}
然后,创建一个DAO类,在书上执行所需的操作。
public class BookDAO {
public Book find(Long id) throws SQLException {
// ...
}
public List<Book> search(Book example) throws SQLException {
// ...
}
public List<Book> list() throws SQLException {
// ...
}
public List<Book> listByDate(Date before, Date after) throws SQLException {
// ...
}
public void save(Book book) throws SQLException {
// ...
}
public void delete(Book book) throws SQLException {
// ...
}
}
在这个类中,您可以编写所有必需的JDBC样板。
最后,您最终会以下列方式使用它:
Book newBook = new Book("Pro JPA 2", "Merrick Schincariol");
bookDAO.save(newBook);
// ...
Book book = bookDAO.find(1L);
// ...
List<Book> allBooks = bookDAO.list();
// ...
List<Book> matchingBooks = bookDAO.search(new Book(null, "Schincariol"));
// ...
您可以找到包含基本启动示例here的详细文章。
为了更进一步,您可能会发现JPA(Java Persistence API)很有趣。它在JDBC上添加了一个额外的层,以便您可以以更面向对象的方式与DB交互,而无需编写所有JDBC样板。确实,它是Java EE的一部分,但您也可以单独使用它。有关在桌面/客户端应用程序中使用JPA的信息,请参阅this tutorial。
答案 1 :(得分:1)
你至少还需要课堂书 - 很难想象你的图书馆界面会是什么样子。一个好主意是使库接口而不是类,因此您可以有多个存储实现 - 现在您想要使用数据库,那么您可能希望突然使用XML。我还建议不要将Library类设为main,而是创建一个单独的LibraryCLI类。然后你可以在以后添加LibraryGUI而无需对Library类本身做任何事情。分离总是好的。
不,从来没有太早阅读设计模式。你越早开始理解这些事情就越好。否则,您将最终得到无法使用且不可维护的代码。好吧,你最终会得到一些,只是程度较小,如果你至少在实现它们之前试图弄清楚如何做事,它可能会更容易修复。
答案 2 :(得分:1)
虽然对于您的小型个人应用程序可能过度,但您可能需要考虑采用三层方法。使用n层架构,数据管理在逻辑上分为不同的层。例如,三层通常为UI -> Business Logic -> Data Access
。
每个图层只能识别它下面的图层。 UI调用业务层,调用数据访问层,最终查询数据库。这些层本身也是多层的也很常见。例如,使用DAO设计模式通常也是一种好习惯,但也使用服务层进一步抽象DAO层并可能执行其他业务逻辑,因此您的体系结构可能如下所示:
UI => Business Logic => Service => DAO
在您的情况下,您的域模型非常简单。您有一个域实体,一本书。这是唯一的持久类。再一次,像Hibernate这样的ORM框架可能过度,但它是一个非常方便的学习工具。它可能值得使用,因为它使数据持久性非常容易。
答案 3 :(得分:0)
我建议您使用Hibernate,这是一种使用面向对象的数据库接口的工具。在您的项目中,您将拥有一组与数据库实体相对应的bean类以及一些XML配置和映射文件。还有一个逆向工程工具,可以从数据库中自动创建这些类和XML。所以你可以这样做:设计数据库(从实体关系方案开始),创建它,在Eclipse中安装Hibernate,运行Hibernate逆向工程然后启动程序设计(首先在纸上然后用代码;这样你就可以避免之后的烦恼。
Hibernate是一个高级工具。如果您正在编写此程序只是为了学习Java和数据库访问,那么最好从基础知识(JDBC等)开始。
无论如何,我确信已经有很多管理书籍的程序。就个人而言,我更喜欢社交网络anobii.com,在那里你可以管理和交换书籍!但我猜你的节目是一个练习。
答案 4 :(得分:-3)
使用设计模式会更好,而不是使用静态方法。