Comment déterminer si Design Pattern est correctement implémenté?

13

J'ai réussi à mettre à l'échelle toutes mes anciennes applications qui n'utilisaient pas de modèles de conception documentés. Quel que soit le motif, je ne sais pas. Dans une large mesure, je ressentais seulement le besoin d'utiliser des concepts POO simples.

Le concept Design Patterns est complexe et difficile à comprendre. Une fois implémentée, comment déterminer si l'implémentation est correcte et si l'application possède un véritable couplage lâche?

RPK
la source
49
Il y a une idée fausse sérieuse sur ce que sont les modèles de conception. Ce ne sont pas des poussières de fée magique que vous saupoudrez sur votre application pour la rendre meilleure. Ils sont principalement un vocabulaire commun pour pouvoir parler des moyens couramment utilisés pour résoudre les problèmes. Je suis à peu près sûr qu'il y a beaucoup de gens qui "mettent en œuvre correctement les modèles" toute la journée sans jamais avoir entendu parler du mot "modèle".
Joachim Sauer
2
@JoachimSauer Ce que vous venez de dire, c'est le genre de choses que les universités techniques devraient enseigner ... Puisque je suis actuellement étudiant, c'est ce qui me fait le plus chier actuellement.
Radu Murzea
1
@JoachimSauer En fait, cette idée fausse provient du fait qu'il existe diverses techniques de mise en œuvre pour le même modèle. Prenons par exemple MVC et MVP, il y a autant de variantes que les projets, du même pattern.
RPK
@RPK +1, le fait même qu'il existe des dizaines de modèles MVX (MVC, MVP, MVA, MVVM, etc.) devrait indiquer clairement qu'il existe de nombreuses façons tout aussi viables de faire les choses.
MattDavey

Réponses:

3

Pour garder la réponse concise, je dirais que si les caractéristiques suivantes sont visibles dans votre code, vous pouvez être sûr que les modèles sont en place même si vous n'avez pas fait d'efforts délibérés (ce qui n'est pas un problème).

Caractéristiques souhaitées:

  1. Votre base de code est testable au niveau de l'unité
  2. Chaque fois que vous implémentez des demandes de modification, vous apportez des modifications uniquement aux classes pertinentes qui sont liées dans le domaine.
  3. Votre base de code ne présente pas d' entropie logicielle .

Si vous êtes toujours curieux d'identifier et d'étiqueter votre code avec les vrais noms de modèles, je recommanderais d'effectuer les actions suivantes pour lancer la balle.

  1. Reverse engineering de votre base de code pour générer quelques daigrammes UML.
  2. Comparez visuellement les diagrammes avec toute référence de matériel de référence de modèles.

Cela devrait vous donner une idée juste.

Sameer Patil
la source
Pourriez-vous nous en dire plus sur le troisième?
Niing
19

Vous mentionnez à la fois les modèles de conception et le couplage. Ce sont des concepts distincts, je vais donc les traiter séparément. La seule vraie connexion est que les modèles de conception ont tendance à favoriser un couplage lâche (car c'est un aspect majeur d'une bonne conception).

Modèles de conception

Le concept de Design Patterns est en fait assez simple: ils ne sont qu'un ensemble de modèles sur la façon de traiter divers problèmes courants. Il y a 2 raisons principales pour lesquelles ils sont populaires:

  1. Ils sont «éprouvés»: ils ont été utilisés à de nombreuses reprises et les avantages / inconvénients de chacun sont généralement connus, en particulier les problèmes subtils qui pourraient causer de gros problèmes sont connus.
  2. Ils fournissent un ensemble de terminologie commun et permettent ainsi une communication plus facile. Si quelqu'un dit que "la classe X joue le rôle de l'observateur dans le modèle d'observateur", les développeurs qui connaissent le modèle peuvent immédiatement comprendre ce qui se passe.

Comment savez-vous que vous l'avez correctement implémenté? C'est délicat. Pour la plupart des modèles, c'est simple - vous l'avez soit bloqué, soit vous ne l'avez pas fait. Certains modèles sont moins clairement définis que d'autres - par exemple, modèle-vue-contrôleur . De tels modèles sont mieux utilisés comme lignes directrices générales. Les détails de la façon dont vous l'implémentez sont moins importants que de comprendre les raisons pour lesquelles le modèle existe et ce qu'il est censé accomplir.

Les modèles de conception ne sont pas «la seule vraie voie». Souvent, vous devrez soit les adapter à vos besoins spécifiques, soit parfois il n'y aura tout simplement pas de modèles adaptés aux exigences. Forcer un motif de conception là où il ne rentre pas est une mauvaise idée; c'est comme utiliser un très bon marteau alors que ce que vous voulez réellement est un tournevis.

Couplage

C'est une idée vraiment importante en informatique. Étant donné que les exigences pour la plupart des projets logiciels changent au fil du temps (parfois de manière significative), la capacité d'une conception à faire face aux changements est importante. Le couplage est essentiellement la mesure de "combien serait-il difficile d'échanger ce composant contre un autre?" Le «composant» peut être une méthode, une classe, un package, une bibliothèque, etc.

Il existe différents types de couplage répertoriés dans cet article Wikipedia .

vaughandroid
la source
2

La réponse est en fait le but que vous souhaitez écrire dès le départ. Pourquoi voulez-vous de la flexibilité?

C'est ça le changement; les exigences changent. Essayez de changer quelque chose dans vos exigences qui se reflète dans le changement de code et voyez à quel point il est facile / difficile de le faire.

m3th0dman
la source
-1

L'utilisation de modèles de conception est une action préventive. Vous utilisez des paterns de conception pour faciliter votre travail lorsque vous faites évoluer l'application ultérieurement. Bien sûr, pour faciliter votre travail plus tard, vous devez faire un peu plus de travail maintenant. donc la vraie question est de savoir combien de changements pouvez-vous attendre à l'avenir et quel est ce changement. Si vous n'avez pas besoin d'évolutivité et de flexibilité, vous pouvez supprimer les modèles de conception.

Les modèles de conception sont eux-mêmes une mise en œuvre des principes de conception orientée objet. Tant que vous respecterez ces principes, vos applications seront flexibles et évolutives; même si vous n'avez pas vraiment de modèle de conception. Comme l'a commenté Joachim Sauer ci-dessus, ce sont des solutions communes à des problèmes communs.

DPD
la source
2
IMO, l'utilisation de modèles de conception n'a rien à voir avec l'évolutivité. C'est simplement un vocabulaire pour reconnaître des modèles communs dans le code afin que nous puissions en parler. Souvent, la mise à l'échelle des applications peut signifier aller à l'encontre de bonnes conceptions en faveur des performances.
Adrian Schneider