Question

Suis-je ne respecte pas la responsabilité unique Principe (SRP) si je mets des méthodes « d'accès aux données » sur l'objet métier? Mon sentiment profond est l'API se sent plus facile à utiliser si la méthode de charge est présent sur la classe elle-même plutôt que d'avoir à deviner quelle classe la méthode se trouve être dans?

Exemple:

public class Image
{    
   public static Image FromFile(string filename)
   {
       return ImageLoader.LoadImage(filename)
   }

   public void SetPixel(int x, int y, Color color)
   {
   }
 }
Était-ce utile?

La solution

Je ne vois pas de problème avec cette en soi autre qu'il n'y a aucune raison impérieuse pour la méthode statique à vivre dans la classe d'image (car il ne dépend pas de quoi que ce soit dans la classe , mais sur la classe elle-même).

si vous vous retrouvez avec un tas de charge de méthodes, ils pourraient être mieux dans une autre classe

Autres conseils

En général, je ne pense pas que savoir comment créer une instance de vous-même par un seul chemin (dans ce cas, à partir d'un fichier image) et d'assurer un état valide souches nécessairement SRP. Si vous avez eu une prolifération de ces méthodes, ce serait une odeur de code, et vous devriez prendre l'indice pour séparer les choses.

Je pense que le fait que ce soit statique rend moins « flagrants » une violation du SRP mais je ne suis pas le plus grand puriste solide. Ce genre de heuristiques ne doit pas être pris trop religieusement ...

D'une certaine manière, oui, mais ce n'est pas aussi mauvais que vous pourriez penser. Tout principe peut être pris à l'extrême qui le rend mal à l'aise.

La question est, si plus tard vous voulez les séparer parce que vous souhaitez pour cette statique d'appliquer à d'autres images, ou si vous voulez mettre en œuvre une méthode beaucoup plus complexe qui peut demander à d'autres types de données.

En général, il est assez facile de factoriser java que je vous suggère d'aller avec ce qui fait sens maintenant et je me souviens juste de revenir chaque fois qu'il semble que ce pourrait être la cause de la complexité vous annuler.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top