lundi 18 mai 2020

Symfony: flush in controller or service class?

Its example, not real code.

1)

    ArticleController
    {
        public function createArticle(Request $request, ArticleService $articeService, UserService $userService,  EntityManager $em){
             $articeService->create(CreateArticleDTO::createFromRequest($request));
             $userService->incrementArticleCount($this->getUser());
             $em->flush();
        }
    }

    ArticleService{
        public function (CreateArticleDTO $dto)
        {
            /// create $entity
            $this->entityManager->persist($entity);
        }
    }

   UserService{
        public function (User $user)
        {
            $user->setArticelCount($user->getArticelCount()+1);
        }
    }

or

2)

ArticleController
    {
        public function createArticle(Request $request, ArticleService $articeService, UserService $userService){
             $articeService->create(CreateArticleDTO::createFromRequest($request));
             $userService->incrementArticleCount($this->getUser());
        }
    }

    ArticleService{
        public function (CreateArticleDTO $dto)
        {
            /// create $entity
            $this->entityManager->persist($entity);
            $this->entityManager->flush();
        }
    }

   UserService{
        public function (User $user)
        {
            $user->setArticelCount($user->getArticelCount()+1);
            $this->entityManager->flush();
        }
    }

1) I do flush one time, but not sure if the article will be saved to the database. ArticleService::create not save entity in DB. When I do the tests, I will have to do a flгsh outside the service. When I save many entity, i will be Batch Processing and do flush in service - It will give a different architecture.

2) I do flush two time. This is the only drawback.

Which option is better?

Aucun commentaire:

Enregistrer un commentaire