Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

ConnectionManager::destroy & bulk #26

Open
armetiz opened this issue Mar 26, 2013 · 7 comments
Open

ConnectionManager::destroy & bulk #26

armetiz opened this issue Mar 26, 2013 · 7 comments
Labels

Comments

@armetiz
Copy link
Contributor

armetiz commented Mar 26, 2013

Pensez-vous qu'un utilisateur puisse se retrouver avec une ensemble de Connection à supprimer ?
Si tel est le cas, il faut que l'on change le prototype de ConnectionManager::destroy.

Actuellement

public function destroy(ConnectionInterface $connection)

En (solution 1)

public function destroy(array $connections)

Ou (solution 2)

public function destroy($connection) //array ou ConnectionInterface

Personnellement, je ne suis pas fan des paramètres dont le type est mix et je vote pour la solution 1.

@choomz
Copy link
Member

choomz commented Mar 26, 2013

Je n'ai pas d'avis là dessus. Si tu regardes les méthodes update() et destroy() des repositories, elles utilisent la solution 2, avec une méthode intermédiaire persistConnection ou removeConnection qui type l'entrée. Impossible donc de persister/supprimer un mauvais type etc ..

C'est une pratique courante dans doctrine et ça facilite la vie, sans être à mon sens stupide.

@armetiz
Copy link
Contributor Author

armetiz commented Mar 26, 2013

La si tu balance un $repository->update(new \stdClass()); tu aura une erreur PHP qui sera générée par une méthode protégé de Repository.
En interne, ok. Mais sur l'utilisation externe.. Je n'en suis pas fan.

$connectionManager->destroy(new \stdClass()); et l'utilisateur chopera une erreur qui viendra d'une méthode protégée d'un Repository..
En tant qu'utilisateur, quand je me plante sur le fonctionnement des librairies et que je me chope des erreurs provenant des bas fonds de la librarie.. Je trouve cela peu sexy de remonter le stack pour voir d'où provient mon erreur..

Après, à l'utilisation, c'est en effet plus pratique de pouvoir balancer une ConnectionInterface ou un array directement, je suis d'accord.

@choomz
Copy link
Member

choomz commented Mar 26, 2013

Oui c'est ce que je dis, persistConnection/removeConnection balancera une erreur sur le type.

@armetiz
Copy link
Contributor Author

armetiz commented Mar 26, 2013

Je me suis mal exprimé.
Pour moi l'utilisateur doit récupérer des erreurs provenant du ConnectionManager, et non des RepositoryInterface.

Du coups,
Cela signifie faire des vérifications de type au sein du ConnectionManager et soulever des InvalidArgumentException au besoin.

@choomz
Copy link
Member

choomz commented Mar 26, 2013

Et bien dans ce cas, conservons le destroy(ConnectionInterface $connection) et rajoutons un destroyBulk(array $connections) dans le manager.

@benjamindulau
Copy link
Member

Un petite interrogation.
Etant donné qu'une connection fantôme ne peut à priori plus exister, et la méthode destroy n'étant utilisée plus que dans le Manager lors des disconnect*, pourquoi ne pas la laisser inchangée et la passer en protected ?

@choomz
Copy link
Member

choomz commented Mar 27, 2013

Alors de mon coté, le destroyBulk ne me servira pas je pense, mais ça peut être utile de l'implémenter.

Par contre pour le destroy, je pense qu'il faut le laisser en public, car dans un traitement ou l'on doit récupérer des connections, boucler, etc ... il peut être intéressant d'appeler directement destroy() plutot que de passer les nodes correspondantes à la connection. Ca a un coté pratique je trouve.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
Projects
None yet
Development

No branches or pull requests

3 participants