CRUD 方法应该是对象还是服务层的一部分?

瓦伦克

我正在经历一些面向对象的学习设计问题,我遇到了这个问题,其中书籍目录中需要一个 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] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

DDD:Dto汇编器是否应该是域层的一部分?

来自分类Dev

去CRUD还是不去CRUD

来自分类Dev

创建View应该是View或ViewModel [MVVM]的一部分吗?

来自分类Dev

为什么HTTP GET参数应该是url的一部分

来自分类Dev

版本是否应该是api返回的DTO的一部分?

来自分类Dev

创建View应该是View或ViewModel [MVVM]的一部分吗?

来自分类Dev

为什么标签的第一部分应该是陈述?为什么不声明?

来自分类Dev

REST api的路径或STOMP的目标应该是spring boot application.properties的一部分吗?

来自分类Dev

PHPUnit和测试CRUD方法

来自分类Dev

在LoopBack中扩展CRUD方法

来自分类Dev

具有部分CRUD的MVC 5 BeginCollectionItem

来自分类Dev

在服务中使用cacheFactory进行CRUD

来自分类Dev

在AngularJS中创建CRUD服务的最佳实践

来自分类Dev

使用Robot Framework测试CRUD Web服务

来自分类Dev

使用Robot Framework测试CRUD Web服务

来自分类Dev

Angular 移动 CRUD 函数来服务

来自分类Dev

实体框架6.1:对子对象的CRUD

来自分类Dev

试图获取非对象 CRUD 的属性

来自分类Dev

用PHP编写CRUD方法的最佳方法

来自分类Dev

Hibernate中的CRUD与一对多映射

来自分类Dev

如何创建CRUD方法的多个重载?

来自分类Dev

在Liferay 6.1中创建CRUD的最快方法

来自分类Dev

CRUD的保存方法指向错误的URL

来自分类Dev

复制Java对象数组的一部分

来自分类Dev

如何获取JSON对象的一部分

来自分类Dev

获取JS对象的一部分

来自分类Dev

复制Java对象数组的一部分

来自分类Dev

验证对象Spring的一部分

来自分类Dev

输出对象的一部分