0

我正在使用带有大量非规范化的 Cassandra,因此我不能使用某种通用类来删除/添加/更新/等对象,因为每种类型的对象都有自己的需要更改的表列表。

例如要删除User,我需要触摸 3 个表,而不仅仅是一个。要删除Item,我需要触摸 7 个表等。这意味着基于对象类型的逻辑完全不同。

方案 1

用户类仅包含我需要的字段(id、名称等)和静态函数来查找用户、删除用户等。

<?php

class User {
    private $id;
    private $name;
    // Magic getters and setters removed to save space here

    public static function delete($id) {
        // find user by id
        // delete that user
    }
}

方案 2

用户类包含所有内容 - 字段(id、名称等)以及删除/编辑/创建/等特定用户的功能

<?php

class User {
    private $id;
    private $name;
    // Magic getters and setters removed to save space here

    public function delete() {
        // find user by $this->id
        // delete that user
    }
}

哪种情况更好,也许还有其他更好的方法可以做到这一点?

4

1 回答 1

0

我投票#2。

最重要的是选择一个,清楚为什么并坚持下去。如果您混合使用这些方法,或者您不清楚为什么选择特定方法,事情将会变得非常混乱。

我是场景 2,因为它清楚你要删除的内容,它总是与$this.

同样在场景 2 中,您的删除方法需要较少的验证,因为此验证可以卸载到构造函数,或者$id在删除对象或数据库行之前简单检查是否设置。

在场景 1 中,尽管您需要$id在尝试删除它之前检查它是否存在,以确保您实际上正在删除某些东西。您也可以返回删除的行数,这本身也可以是验证。但在未来,这种验证可能会比仅仅检查正在删除的内容更复杂。

最好让构造或load()函数处理尽可能多的验证。

于 2013-07-30T20:18:23.723 回答