我在读编程的最佳实践,这是说,创造一个功能时,我们应该让它做一个只有单一的特定任务。

我的模型功能,检索数据和它的相关数据。例如:

$这 - >以学生> StudentAssignments();

目前该功能获取学生的作业加上对每个学生分配和数据的问题。我使用他们所有。我的困境是,如果我试图让不同的功能,检索相关的数据(学生和问题DATAS)它的征税,因为我生产的DB更多的呼叫。

你会怎么你们建议?

有帮助吗?

解决方案

东西要记住做这种重构的时候...

我通常会在我的车型型号 - > getSomethingAndSomethingElse功能。 这些函数都是公开的,意味着被称为做复杂的替代品(或任何)找到从控制器的呼叫。

我通常会做的是随后建立的私有函数的小集合模型。 你的情况我可能沿...

东西线

学生为> getStudentAssigmentsWithQuestions

这然后调用一些私有函数即

学生为> getStudent这可能会调用学生为> joinStudentAssignment这又可能会调用指定 - > joinAssignmentQuestion等

双下划线前缀已被删除,因为降价希望,因为他们的大胆的事情。如果你正在使用PHP5的底线不是真的很重要,反正只要你使用“私人”或“proteced”关键字。

基本上我使用公共方法,用于一组非常特定查询建筑物或关联的模型中构建私有功能的容器。这使我有一个具有复杂的数据返回的API,但我构建查询或结果集(这取决于所涉及的数据,关系或查询的复杂的类型)由小片 - 这可以理想地定意和更多使用比一个公共的函数调用。

其他提示

我觉得你做的很好。但是,你应该重新考虑重新命名功能

$this->Student->getStudentAssignmentsWithQuestions

或任何你认为合适的。我认为一个人应该尽量为几个电话做数据库尽可能(我假设你正在执行中的某个地方加入),而不是取每组通过特定的方法元素。这可能会导致这样的事实,你会得到更多的方法(因此必须写一些更多的测试),但我认为这是做正确的方式。

要保卫设计论证: 你的方法不只是一个单一的任务;它获取学生的作业,每个分配的问题。

没有,如果你严格关注代码重构,你应该说的blob分解成,你说,执行单一任务的简单功能。是的,你会打更多的数据库,但考虑是多么容易在CakePHP中使用的缓存工作,性能不应该是一个问题。如果是,那么你不应该担心在这一点上的代码重构。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top