Salut,

En ce qui me concerne, non, je n'encapsule pas de cette manière là, sauf en cas 
de besoin.
En ce qui concerne les tests, RSpec fournit stub_chain qui permet de gérer ce 
genre de choses.
Le but est que ça fonctionne et je fais confiance à la team Rails pour fournir 
du code qui marche :)

Ça ne respecte peut être pas la loi de Demeter mais entre perdre du temps pour 
que ça marche et perdre du temps sur le code pour au final ne gagner ni en 
lisibilité ni en flexibilité... ^^

Enfin après c'est mon opinion.

Cela dit, concernant ton exemple, je fais plus souvent ceci:

    person.hobbies << hobby

Cela revient au même mais je trouve la syntaxe plus agréable.

Bonne soirée :)

Simon COURTOIS

On 19 sept. 2012, at 21:12, Guirec Corbel <[email protected]> wrote:

> Bonjour à tous,
> 
> Voici un exemple de code :
> class Person < ActiveRecord::Base
>     has_many :hobbies
> end
> 
> class Hobby < ActiveRecord::Base
>     belongs_to :person
> end
> 
> Admettons que je veuillez ajouter un hobbie à une personne je peux faire ça :
> 
> person.hobbies.add(hobby)
> 
> Mais je viole le principe d'encapsulation qui voudrais que je fasse ça :
> 
> class Person < ActiveRecord::Base
>     has_many :hobbies
>     def add_hobby(hobby)
>          hobbies.add(hobby)
>     end
> end
> 
> ...
> person.add_hobby(hobby)
> 
> J'ai donc fait une nouvelle fonction pour ajouter un hobbie. Le problème ce 
> que ça fait plus de ligne de codes, particulièrement si l'on a beaucoup de 
> relations. Surtout que l'on doit faire un test pour cette fonction ce qui 
> nous rajoute encore du code. Le point positif que je vois c'est que c'est 
> plus facile pour faire des stubs et des mocks.
> 
> Ça serait facilement possible de faire une plugin pour ça mais est-ce 
> vraiment utile?
> 
> Voici ma question : Encapsulez vous toutes vos fonctions?
> 
> Bonne journée tout le monde!
> 
> -- 
> 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 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]

Répondre à