Le test unitaire est-il l'objectif principal du modèle MVC?

14

Récemment, dans une interview, l'une des questions était «Pourquoi utilisons-nous MVC? Je viens de répondre que c'est beaucoup plus proche de la façon dont de nombreux systèmes du monde réel le sont! Expliqué les avantages qu'il présente en matière de maintenabilité, d'évolutivité, etc.

Bien que je sache que le leur est un point valable, je doute toujours que ce soit la raison principale car (i) même si je décide de ne pas écrire de tests unitaires, MVC est un choix probable (ii) De nombreux systèmes GUI où les tests unitaires sont là ne le font pas suivez MVC.

La question est donc: «Le test unitaire est-il l'objectif principal du modèle MVC?

EDIT: Je suppose qu'ils mentionnent peut-être la facilité de développement piloté par les tests / l'écriture de tests NUnit. C'est parce que nous pouvons écrire des cas de test pour le modèle (à condition que la vue reflète exactement les changements d'état du modèle) - veuillez me corriger si je me trompe.

WinW
la source
11
Vous n'avez pas réussi l'entretien, n'est-ce pas? Si non, vous avez de la chance. Je ne vais pas rejoindre une entreprise qui a un mauvais état d'esprit dès le départ. :) Tests unitaires Certainement pas l'objectif principal. Cela peut aider les tests unitaires car les préoccupations sont toutes séparées, mais certainement pas l'objectif principal.
Rudy
4
N'oubliez pas que l'entretien fonctionne dans les deux sens. Vous les sondez autant qu'ils vous testent. Vous venez de recevoir un drapeau rouge: n'entrez pas dans cette entreprise. Ils n'ont aucune idée, mais pire encore, ils pensent qu'ils ne veulent pas s'en rendre compte, donc aucun espoir d'amélioration. Si vous choisissez d'aller dans l'entreprise, vous serez confronté à de nombreuses situations kafkaïennes.
deadalnix
@Rudy Non, je n'ai pas réussi: P, c'était le Dev Center d'une banque d'investissement de premier plan. De plus, les gars avaient l'air bien et très authentiques avec d'autres questions et c'est pourquoi je me suis confondu avec cela.
WinW
@deadalnix, ouais vrai .. ressentez la même chose après avoir vu les réponses ici. Mais je n'en étais pas sûr avant de le poster ici.
WinW
Je suis totalement d'accord avec deadalnix. N'allez pas dans cette entreprise.
Rudy

Réponses:

33

L'objectif principal serait la «séparation des préoccupations», car le modèle, la vue et le contrôleur ont tous des responsabilités distinctes.

L' auteur du document original Xerox PARC déclare que:

Le but essentiel de MVC est de combler le fossé entre le modèle mental de l'utilisateur humain et le modèle numérique qui existe dans l'ordinateur.

Si les tests unitaires étaient l'objectif principal, on pourrait facilement tester les vues unitaires. Un examen du paysage des projets / cadres de tests unitaires révélerait qu'il est tout à fait contraire à l'affirmation formulée. L'une consiste généralement à utiliser des tests d'intégration et fonctionnels pour tester la vue.

Vineet Reynolds
la source
2
Je dirais que les objectifs principaux sont de permettre la métaphore de la manipulation directe (c'est essentiellement ce que dit la citation) et l'autonomisation des utilisateurs (il était initialement prévu que seuls les modèles seraient écrits par des programmeurs, les vues et les contrôleurs seraient écrits par des utilisateurs finaux).
Jörg W Mittag
14

À mon avis, la réponse est un non catégorique. C'était peut-être le principal avantage qui a été observé dans cette organisation spécifique, mais je n'appellerais pas cela «l'objectif principal».

Je suppose que ce ne serait pas si difficile d'implémenter MVC d'une manière, c'est incroyablement difficile à tester unitaire (diable - la façon dont je l'ai fait pour la première fois était à peine testable).

D'un autre côté, on pourrait dire que pratiquement n'importe quel modèle (à l'exclusion de choses comme Singleton) facilite les tests unitaires, car ils favorisent le plus souvent le découplage - mais est-ce leur «objectif principal»? À peine.

Mchl
la source
12

MVC (tout comme la plupart des modèles de conception connus) était en cours avant que les tests unitaires ne soient connus. Le livre du GoF a été publié en 1994 - et ils ne faisaient que documenter les modèles qui étaient utilisés depuis des années (voire des décennies) auparavant. (Et il n'y est pas fait mention de tests unitaires.) À propos des tests unitaires, je ne peux pas localiser l'heure exacte à laquelle il est devenu "public" - je l'ai lu personnellement dans des articles liés à la programmation extrême et dans le premier livre XP est sorti en 1999.

Il est donc évident que les tests unitaires ne peuvent pas être l'objectif principal de l'invention / documentation des modèles - alors qu'il est juste de dire que les modèles, lorsqu'ils sont bien appliqués, facilitent considérablement les tests unitaires.

Péter Török
la source
La référence de la chronologie est une belle mention - soutient logiquement l'argument.
WinW
Il semble y avoir un problème avec la date. heim.ifi.uio.no/~trygver/themes/mvc/mvc-index.html indique que "MVC a été conçu en 1978 comme la solution de conception à un problème particulier". Pas de soucis ... Votre argument est toujours valable - MVC était là bien avant le début des tests unitaires.
WinW
Les tests unitaires existent depuis au moins les années 1980. Je commençais ma carrière à l'époque et nous avons eu des tests unitaires sur certains des projets sur lesquels j'ai travaillé (et cela ne semblait pas être une nouvelle idée à l'époque). Nous n'avions tout simplement pas les cadres prédéfinis que nous avons maintenant.
GreenMatt
2
@GreenMatt, je sais que les tests unitaires n'ont pas été inventés par Kent Beck, juste réutilisés :-) Mais AFAIK c'était relativement inconnu avant XP et Agile ont commencé à le diffuser largement.
Péter Török
@ Péter Török: Je me souviens 1) d'avoir écrit mon propre code simple pour tester des fonctions individuelles jusqu'à l'université (au début du milieu des années 80 pour moi) et que j'ai eu l'idée de quelqu'un d'autre; 2) voir des représentations et lire des articles sur le modèle de cascade dans les années 80 ou 90 avec une phase appelée "Codage et Test Unitaire" (contre juste "Codage"). (Désolé, je ne me souviens pas où, je ne peux donc pas fournir de citations.) Ainsi, les tests unitaires existent et évoluent depuis un certain temps.
GreenMatt
2

Je pense que non, la facilité des tests unitaires est l'un des avantages, mais cela fait partie d'une collection d'avantages lors de l'utilisation de MVC avec les raisons que vous énumérez. Dire qu'il y a une seule raison principale d'utiliser MVC est une erreur. Il semble que la société en question ait choisi MVC pour faciliter les tests unitaires, c'est pourquoi ils pensent que c'est la principale raison. Personnellement, mes raisons d'utiliser MVC sont sa simplicité par rapport aux formulaires Web, ce qui facilite la conception et la maintenance, mais chaque individu / entreprise aura ses propres raisons d'utiliser n'importe quelle technologie.

Robert Anton Reese
la source
0

Dans le monde ASP.NET MVC, de nombreuses améliorations d'ASP.NET ont été incluses dans le cadre lui-même. L'objectif principal de ce modèle de conception est d'isoler la logique métier de l'interface utilisateur afin de se concentrer sur une meilleure maintenabilité, une testabilité améliorée et une structure plus propre pour l'application.

ASP.NET MVC possède certaines capacités qui en font la meilleure option pour choisir si vous avez besoin d'un ou plusieurs des éléments suivants:

Un niveau élevé de contrôle sur le code HTML généré : contrairement aux formulaires Web, les vues dans ASP.NET MVC rendent le code HTML exactement comme vous le dites. Récemment, les formulaires Web ont été améliorés dans ce domaine, mais n'ont toujours pas le niveau de contrôle de MVC.

Tests unitaires plus faciles : avec ASP.NET MVC, il est très facile de suivre des modèles de test tels que le développement piloté par les tests (TDD). En raison du cycle de vie des événements complexes dans les formulaires Web, en plus d'un cadre basé sur le contrôle, TDD est beaucoup plus facile avec MVC.

Séparation des préoccupations : cela signifie que tous les aspects du système sont clairement séparés les uns des autres. En raison du modèle qu'elle implémente, une application MVC est divisée en parties distinctes et liées de manière lâche (modèle, vues et contrôleurs), ce qui facilite la maintenance.

Certains des autres avantages sont:

• Le modèle MVC lui-même facilite la gestion de la complexité en séparant clairement la fonctionnalité de l'application en trois parties principales, le modèle, la vue et le contrôleur.

• Les applications Web ASP.NET MVC n'utilisent pas l'état d'affichage ni les formulaires basés sur le serveur. Cela rend le framework MVC idéal pour les développeurs qui souhaitent un contrôle total sur le comportement d'une application. L'état d'affichage peut devenir très grand, ce qui est un problème pour les appareils comme les smartphones fonctionnant sur des réseaux lents (la transmission de toutes ces informations peut être très lente). Dans une page Web Forms, vous ne pouvez en avoir qu'un par page. C'est une restriction assez importante. Dans MVC, il n'y a pas une telle restriction, c'est-à-dire que vous pouvez avoir autant d'éléments que vous le souhaitez.

• ASP.NET MVC offre une meilleure prise en charge du développement piloté par les tests (TDD).

• ASP.NET MVC fonctionne bien pour les applications Web prises en charge par de grandes équipes de développeurs et pour les concepteurs Web qui ont besoin d'un degré élevé de contrôle sur le HTML. Traitement des demandes ASP.NET MVC

Arvind Kumar
la source