0

在我的模型中,我通常至少有 2 个“获取”例程$model->get_one()$model->get_where()并且我的模型经常扩展一个version_model处理数据库记录版本的例程,并具有类似get_record_history().

所有这些例程都选择相同的数据库字段并执行相同的表连接。因此,为了使连接干燥,我在每个模型$model->create_joins()中定义了一个例程,然后由$model->get()上面提到的其他模型使用。

我也在考虑添加$model->select_fields()以使字段选择干燥,但我想我会在这里发帖,看看其他人如何处理这个问题,或者是否有更好的方法?

编辑:问题:是否有比上述方法更好的方法来避免在例程中重复表连接,这些例程在我的模型中选择具有不同标准的相同数据。这是像 PDO 这样的库处理的东西吗?

4

2 回答 2

1

对此有一条经验法则,称为“三法则”,由 Martin Fowler 引入并归功于 Don Roberts。来自维基百科:

它指出代码可以复制一次,但是当相同的代码复制三次时,它应该被提取到一个新的过程中。

应用 DRY 原则时很容易迷失方向,抽象出你能找到的一切,导致应用程序过于复杂。

在进行抽象以应用 DRY 时,考虑成本/收益比是一个好主意。

抽象通用逻辑需要时间,并且使代码更复杂(在某种程度上)。但结果是,你得到了更清晰的代码。

如果您正在处理不需要维护的快速修复,只需复制粘贴即可。但是,如果您正在构建一个需要维护的复杂应用程序,请尝试进行必要的抽象,因为它可能会在将来为您节省更多时间。

进一步阅读:

你不会需要它的。

亲吻原则。

于 2012-04-04T16:13:49.980 回答
0

DRY 也适用于设计,但您写道,您的模型有时是从某个关心版本控制的类扩展而来的。

可能您应该将所有处理持久性和版本控制的模型移出,这样您就可以创建其他可以处理这些问题的对象,这样您的代码就会更加 DRY。

于 2012-04-04T16:10:45.167 回答