我正在经历一些面向对象的学习设计问题,我遇到了这个问题,其中书籍目录中需要一个 Book 对象。这是问题的解决方案中建议的 Book 对象。
public class Book {
private long ID;
private String details;
private static Set<Book> books;
public Book(long iD, String details) { ... }
public static void addBook(long iD, String details){
books.add(new Book(iD, details));
}
public void update() { }
public static void delete(Book b) { books.remove(b); }
public static Book find(long id){
for (Book b : books)
if(b.getID() == id) return b;
return null;
}
}
一方面,这个Book
对象对我来说看起来非常好,因为它包含修改/获取有关书籍对象的信息以及有关书籍的数据所需的所有方法。因此,当使用 OOP 的定义时,这看起来很棒,因为这就是对象应该是什么。
但在我 1-2 年的编程生涯中,我一直认为创建、删除的方式。修改对象应该通过服务层完成,在这种情况下本质上是一个 BookService 类,它包含使用不包含这些 CRUD 方法的 Book 对象创建书籍、更新书籍和从数据库中删除书籍的方法。
第一种方法在理论上看起来很棒,而下一种方法在实践中很棒,因为我从我的任何经验中知道。第二种方法是否存在缺陷/陷阱?应该首选哪种方法?
PS:我不确定这些问题是否被接受,如果不是,我很乐意删除/编辑它,但我找不到更好的地方来获得答案:(
如果您正在实现一个具有学习目的的控制台应用程序,那么将 CRUD 逻辑实现到模型中并不是什么大问题..但我认为情况并非如此。
您已经实现的这个模型 Book 必须只有对象属性加上 getter 和 setter。您实现的其他 CRUD 方法必须在外部层中。外部层可能是 SERVICE 或 DAO,这取决于..但是你必须知道,如果你像现在这样在模型类中编写一些额外的逻辑,这不是一个好习惯。
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句