Si je me base sur mon experience Java, un service devrait etre appele comme
ceci:

dummy_object_service.save(dummy_object)

Il n'y a aucune raison qu'une instance de service soit liee a une instance
d'un objet en particulier

Ton form est la pour valider ton modele, il ne devrait pas faire la
sauvegarde

Donc, a mon sens, tu devrais avoir un truc du genre

form = UserForm.new(params[:user])

if form.valid?
  # static
  UserService.save(form.object)

  # instance
  UserService.get.save(form.object)
end

static ou instance... je ne le sais... je sais pas comment se comportent
les services en ruby
Je trouve tres bizarre le concept d'un service qui sauve un form, un
service devrait toujours travailler sur les objets qu'il est cense manager,
pas leur form (genre pour le delete, tu crees un form que tu files au
service?)

=====

ou est-ce le formulaire ou le service devrait savoir comment créer les
associations. Est-ce le rôle d'un autre type d'objet?

C'est difficile de se retrouver dans ces concepts.

Bienvenue dans l'enfer des services qui doivent appeler d'autres services
(surtout si il y a du IOC par dessus) et qui transforment la soit disant
super reusabilite de tout ca en un sac de noeuds insupportable.

Mais dans ton exemple super simple, je ferais tout simplement:

def user
  group.users.new # or find
end

Et si tu veux ajouter un user existant a un groupe existant, alors tu ne
travailles plus sur une isntance de user ou group mais sur une instance de
l'association entre les 2
Donc ton form et ton service a utiliser doivent etre ceux de l'association.


Le 1 avril 2014 17:22, Guirec Corbel <[email protected]> a écrit :

> Bonjour à tous,
>
> J'aimerai avoir votre opinion sur le rôle des form objects, services
> objects et du controller. À votre avis, est-ce le form object qui va créer
> un service et l'appeler ou est-ce que le controller doit créer un service
> avec le form object en paramêtre? Je m'explique avec du code :
>
> Est-ce que ça doit être ça :
>
> class MyController < ApplicationController
>   def create
>     MyForm.new(params).save
>   end
> end
>
> class MyForm
>   def save
>     Service.new(self).save
>   end
> end
>
> ou
>
> class MyController < ApplicationController
>   def create
>     form = MyForm.new(params)
>     Service.new(form).save
>   end
> end
>
>
> Autre question : Est-ce le rôle du controller de construire les modèle ou
> à l'un des deux autres. Imaginons un formulaire de création d'utilisateur
> avec un groupe. Est-ce que le "bon" code serait comme ceci :
>
> class MyController < ApplicationController
>   def create
>     form = MyForm.new(user: user, group: group)
>     form.attributes = params[:user]
>     form.save
>   end
>
>    def user
>         User.new # or find
>    end
>
>    def group
>      Group.find(params[:group_id])
>    end
> end
>
> ou est-ce le formulaire ou le service devrait savoir comment créer les
> associations. Est-ce le rôle d'un autre type d'objet?
>
> C'est difficile de se retrouver dans ces concepts.
>
> --
> --
> Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de
> Google Groups.
> Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse
> [email protected]
> Pour résilier votre abonnement envoyez un e-mail à l'adresse
> [email protected]
> --- Vous recevez ce message, car vous êtes abonné au groupe Google
> Groupes Railsfrance.
> Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le
> concernant, envoyez un e-mail à l'adresse railsfrance+unsubscribe@
> googlegroups.com.
> Pour plus d'options, visitez le site https://groups.google.com/d/optout .
>

-- 
-- 
Vous avez reçu ce message, car vous êtes abonné au groupe "Railsfrance" de 
Google Groups.
Pour transmettre des messages à ce groupe, envoyez un e-mail à l'adresse 
[email protected]
Pour résilier votre abonnement envoyez un e-mail à l'adresse 
[email protected]
--- 
Vous recevez ce message, car vous êtes abonné au groupe Google Groupes 
Railsfrance.
Pour vous désabonner de ce groupe et ne plus recevoir d'e-mails le concernant, 
envoyez un e-mail à l'adresse [email protected].
Pour plus d'options, visitez le site https://groups.google.com/d/optout .

Répondre à