Php 优化——两种相似方法
我刚到Symfony,有点小问题。 我一直在网上搜索,找不到问题的答案。 我创建了API,有两个控制器(UserController、InstructorController)和类似的方法(addUserImage、addInstructorImage)。我创建了抽象BaseImage(这里是保存文件)、InstructorImage和UserImage(这里是设置路径)。这是我的控制器:Php 优化——两种相似方法,php,design-patterns,copy-paste,symfony,Php,Design Patterns,Copy Paste,Symfony,我刚到Symfony,有点小问题。 我一直在网上搜索,找不到问题的答案。 我创建了API,有两个控制器(UserController、InstructorController)和类似的方法(addUserImage、addInstructorImage)。我创建了抽象BaseImage(这里是保存文件)、InstructorImage和UserImage(这里是设置路径)。这是我的控制器: /** * @ApiDoc( * name="addInstructorImage", sectio
/**
* @ApiDoc(
* name="addInstructorImage", section="Instructors",
* description="Add Instructor Image",
* )
*
* @Route("/instructor/{instructor}/image", name="instructors.image.add")
* @Method("POST")
*
* @param Request $request
* @param Instructor $instructor
* @View
*
* @return \FOS\RestBundle\View\View
*/
public function addInstructorImage(Request $request, Instructor $instructor)
{
$this->denyAccessUnlessGranted('edit', $instructor->getUser());
$image = new InstructorImage();
$form = $this->get('form.factory')
->createNamed('', InstructorImageType::class, $image, ['csrf_protection' => false, 'method' => 'POST']);
$form->handleRequest($request);
if ($form->isValid()) {
$image->setInstructor($instructor);
$em = $this->getDoctrine()->getManager();
$em->persist($image);
$em->flush();
return $this->view(null, Response::HTTP_NO_CONTENT);
}
return $this->view($form, Response::HTTP_BAD_REQUEST);
}
我的第二个控制器是相同的。
唯一的区别是另一个对象和另一种形式。优化此代码的最佳方法是什么。我应该创建添加照片的服务还是使用链处理程序?也许你有更好的主意?
谢谢你的帮助简短回答:不要浪费时间优化这类东西 您的方法由19行代码组成。它的所有基本锅炉板易于阅读的代码。我知道,每当我看到重复的代码时,我都会尝试以某种方式将其组合起来,但究竟会得到什么呢?把19行减少到15行 如果我要更改您的代码,那么我会尝试将一些业务逻辑转移到它自己的服务中。比如:
InstructorManager::addImage($instructor,$image);
这将摆脱实体管理器锅炉板,并提供一些抽象。虽然该方法所做的只是设置映像并调用flush,但可能会使测试变得更容易一些。不值得这么努力。如果您还需要添加其他管理器类型的功能,那么这可能是值得的。或者,您可能希望能够从控制台应用程序添加图像
当然,将来您可能不再需要添加功能。也许你想在图像更改时通知某人。如果您发现自己需要修改重复的代码,那么您可以证明将公共代码移动到自己的服务中的努力是合理的
我想您可以使用容器的工厂功能为表单创建服务。特别是如果你有一堆这样的表格要做。但同样,这几乎不值得付出努力,甚至可能使维护变得更加困难。简短回答:不要浪费时间尝试优化这类东西 您的方法由19行代码组成。它的所有基本锅炉板易于阅读的代码。我知道,每当我看到重复的代码时,我都会尝试以某种方式将其组合起来,但究竟会得到什么呢?把19行减少到15行 如果我要更改您的代码,那么我会尝试将一些业务逻辑转移到它自己的服务中。比如:
InstructorManager::addImage($instructor,$image);
这将摆脱实体管理器锅炉板,并提供一些抽象。虽然该方法所做的只是设置映像并调用flush,但可能会使测试变得更容易一些。不值得这么努力。如果您还需要添加其他管理器类型的功能,那么这可能是值得的。或者,您可能希望能够从控制台应用程序添加图像
当然,将来您可能不再需要添加功能。也许你想在图像更改时通知某人。如果您发现自己需要修改重复的代码,那么您可以证明将公共代码移动到自己的服务中的努力是合理的
我想您可以使用容器的工厂功能为表单创建服务。特别是如果你有一堆这样的表格要做。但同样,这几乎不值得付出努力,甚至可能使事情变得更难以维护。我想这个问题更适合-以防你在这里得不到一个好答案。@Jurik在提到其他网站时,指出Wojciech当然应该立即删除这个未回答的问题通常是有帮助的@gnat-如果您可以将其标记为迁移,这将很有帮助。我想这个问题更适合-以防您在这里没有得到好的答案。@Jurik在引用其他网站时,指出Wojciech当然应该立即删除这个未回答的问题,这通常是有帮助的@gnat—如果您可以将其标记为迁移,这将非常有用。