在哪里放置删除查询的逻辑

时间:2013-08-15 14:43:07

标签: design-patterns

我已将模型逻辑分离为" entity"," mapper"和"服务"。我开始将我的数据库删除查询放在映射器中,但我想的越多,感觉就像一个服务。

我不确定,可能还有一些我不知道的其他层次会更有意义。

3 个答案:

答案 0 :(得分:1)

是的我会将删除逻辑放在服务层中。实体和映射器对象对删除没有任何责任,但服务层是完美的选择。

有一些模式,例如Active Record,实体可以与数据库交互(例如在Ruby on Rails中),但在你的情况下,坚持使用服务层。

答案 1 :(得分:1)

准确地将物理更改的逻辑放置到数据库的位置完全取决于您的设计细节。如果你的“映射器”中有UPDATE和INSERT语句,那么使用DELETE是完全合适的。相反,如果他们在服务中,那么拥有它们也是完全合适的。

重要的是,您的软件是有道理的,而不是它坚持其他人声明的模型。

(虽然,fwiw,我希望你的“实体”类不知道物理数据库,你的“映射器”类将db结果集转换为实体类,而你的“服务”类包含所有实际的db代码,从SELECT和UPDATE到INSERT和DELETE。)

答案 2 :(得分:0)

当我在Web服务上工作时,我创建了能够插入,编辑,删除和选择的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()时,它知道是否调用插入或更新方法。在这种情况下插入。

这个泛型类应该调用所有与数据库相关的方法。