我将模型逻辑分为“实体”、“映射器”和“服务”。我首先将我的数据库删除查询放在映射器中,但我越想它,感觉就像是一种服务。
不过我不确定,也许还有一些我不知道的其他层会更有意义。
我将模型逻辑分为“实体”、“映射器”和“服务”。我首先将我的数据库删除查询放在映射器中,但我越想它,感觉就像是一种服务。
不过我不确定,也许还有一些我不知道的其他层会更有意义。
是的,我会将删除逻辑放在服务层中。实体和映射器对象对删除没有任何责任,但服务层是完美的契合。
有诸如 Active Record 之类的模式,其中实体可以与数据库交互(例如在 Ruby on Rails 中),但在您的情况下,请坚持使用服务层。
将物理更改逻辑放置在数据库的确切位置完全取决于您的设计细节。如果您的“映射器”中有 UPDATE 和 INSERT 语句,那么使用 DELETE 是完全合适的。相反,如果他们在服务中,那么让他们在那里也是完全合适的。
重要的是你的软件是有意义的,而不是它遵循别人的模型。
(虽然,fwiw,我希望您的“实体”类不知道物理数据库,您的“映射器”类将数据库结果集与实体类相互转换,并且您的“服务”类包含所有实际的数据库代码,从 SELECT 和 UPDATE 到 INSERT 和 DELETE。)
当我从事网络服务工作时,我制作了能够插入、编辑、删除和选择的 ORM 通用类。然后我将这个类子类化。子类具有类似于我的数据库表中的字段的属性。
如果我想删除一些我拥有的对象,我只需调用(int PHP):
$object->delete;
如果我创建一个对象并想将其添加到数据库中,我会调用:
$object = new ObjectModel($pdo); /// subclass of ORM class (TableName: Object)
$object->name = "name";
$object->age = 15;
$object->save();
ORM 类有isLoaded
键,当我调用save()
它时知道是调用插入还是更新方法。在这种情况下插入。
这个泛型类应该调用所有与数据库相关的方法。