57 votes

Quand sont les modèles de conception du problème plutôt que de la solution?

Je n'ai jamais travaillé sur les logiciels dont j'avais besoin pour utiliser les modèles de conception. Selon Paul Graham Revenge of the Nerds essai, les modèles de conception sont un signe de ne pas assez l'abstraction.

Pour citer directement, lui Par exemple, dans le OO monde, vous entendez une bonne affaire au sujet de "modèles". Je me demande si ces motifs ne sont pas, parfois, la preuve du cas (c), l'homme compilateur, au travail. Quand je vois les modèles dans mes programmes, je considère que c'est un signe de difficulté. La forme d'un programme ne doit indiquer que le problème qu'il doit résoudre. Toute autre régularité dans le code est un signe, du moins pour moi, que je suis en utilisant des abstractions ne sont pas assez puissants-- souvent que je suis de la génération par la main de l'expansion de certains macro que j'ai besoin d'écrire."

Je me demandais juste si tout le monde pensait que les modèles de conception sont surexploitées et sont les symptômes de ne pas avoir assez d'abstraction dans votre code.

41voto

Adam Bellaire Points 42797

Je ne pense pas que les modèles en soi le problème, mais plutôt le fait que les développeurs peuvent apprendre des modèles et puis overapply eux, ou de les appliquer dans les moyens qui sont vraiment inapproprié.

L'utilisation de modèles est quelque chose que les programmeurs expérimentés seulement d'apprendre naturellement. Vous avez résolu un problème X, de nombreuses fois, vous savez ce qu'est une approche qui fonctionne, vous utilisez cette approche, car votre compétence et votre expérience vous dire que c'est approprié. C'est un patron, et c'est correct.

Mais il est également possible pour un programmeur qui a de moins en moins qualifiés pour trouver une façon de faire les choses et d'essayer de caser tous les problèmes qu'elles rencontrent dans ce moule, car ils ne savent pas de toute autre manière. C'est un patron aussi, et c'est mal.

26voto

edgar.holleis Points 2760

Venez sur les gens, merci de lire l'intégralité de la citation, de le lire attentivement. Ou mieux encore, de lire le texte.

Paul Graham reproche, entre autres choses, C-comme les langages de ne pas fournir les moyens adéquats de l'abstraction. Dans le cadre de l'essai, sa critique de modèles est une réflexion après coup, ou plutôt d'un cas dans point pour son argument principal. Son raisonnement va comme ceci:

Il est logique d'utiliser des stratégies communes pour résoudre des problèmes récurrents. En très résumé langues, il est possible de formaliser ces stratégies et de les mettre dans une bibliothèque. Chaque fois que vous avez besoin de les utiliser, il vous suffit d' #include eux, les instancier, de les étendre, ou quoi que ce soit. C-comme langues en revanche de ne pas fournir les moyens nécessaires à l'abstraction. C'est attestée par le fait qu'il existe quelque chose comme "modèles". Un modèle est une stratégie commune qui ne peut être exprimé par le code de la bibliothèque et donc doit être expressément écrit à chaque fois qu'il est appliqué.

Paul Graham ne pense pas que les modèles sont mauvais en eux-mêmes. Ils sont un symptôme de langues à offrir des moyens de l'abstraction. À cet égard, il est presque certainement droit. Si l'on doit utiliser des langues différentes en raison de cela, c'est bien sûr une autre discussion.

L'affiche originale de la question, d'autre part, est faux: les Motifs ne sont pas "les symptômes de n'avoir pas assez d'abstraction dans votre code", mais sont des symptômes de ne pas avoir assez de moyens de l'abstraction dans votre langue.

22voto

Kevin Points 57797

Les modèles sont simplement une façon de décrire la façon dont les choses fonctionnent. C'est une façon de leur classement. Y at-il des programmes qui en abuser? Assurez-vous. Le plus grand avantage d'avoir des modèles est que par le classement de quelque chose comme ceci ou cela, tout le monde est sur la même page (en supposant qu'ils ont le niveau de connaissances pour savoir de quoi l'on parle.). Quand vous avez un système avec de 10 000 de lignes de code, il devient nécessaire pour être en mesure de déterminer rapidement et de la façon dont quelque chose est d'aller travailler.

Est-ce à dire que vous devez toujours utiliser des modèles, pas de. Qui va conduire à des problèmes de forcer les choses dans une classification, mais vous ne devriez pas avoir peur d'eux.

22voto

T.E.D. Points 26829

Mon problème avec les motifs, c'est qu'il semble y avoir une centrale sont au cœur du concept: L'idée que si vous pouvez en quelque sorte catégoriser le code d'experts en écriture, alors n'importe qui peut écrire expert code par le reconnaître et mécaniquement application des catégories. Cela sonne bien pour les gestionnaires, en tant qu'expert, les concepteurs de logiciels sont relativement rares.

Le problème est qu'il n'est pas vrai. Vous ne pouvez pas écrire expert-code de qualité avec seulement des "design patterns", pas plus que vous pouvez concevoir votre propre professionnel de la mode de concepteur de vêtements de qualité en utilisant uniquement des patrons de couture.

19voto

geowa4 Points 17712

La forme d'un programme doit refléter seulement le problème qu'il doit résoudre.

Et ce qui se passe lorsque les besoins changent et votre module n'est pas prélevée à l'aide d'une Façade ou potentiellement un Médiateur, rendant ainsi trop difficile à échanger?

les design patterns sont un signe de ne pas assez de l'abstraction

Les Chances sont, si vous avez une abstraction de tout bien, alors vous avez un modèle de conception quelque part.

Que faire si il y a un très "lourd", objet qui n'a pas à être chargé? Le modèle de Proxy évite à l'utilisateur d'attente pour toujours.

Je pourrais continuer, mais je pense que j'ai assez dit. Les Design patterns sont des outils très utilisés correctement. Le problème est lorsqu'ils sont utilisés incorrectement, mais je suppose que c'est pourquoi abusé modèles sont appelés anti-modèles.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X