Il n'y a rien de mal avec cette
motif? Est-ce juste une question de
choix personnel si l'état de la
la classe est tenue dans les champs et les propriétés
ou passé autour parmi statique
les méthodes utilisant des arguments?
En parlant de ma propre expérience personnelle, j'ai travaillé sur 100 KLOC applications qui ont très très profond objet des hiérarchies, tout hérite et prime sur tout le reste, tout ce met en œuvre une demi-douzaine d'interfaces, de même que les interfaces hériter d'une demi-douzaine d'interfaces, le système met en œuvre tous les design pattern dans le livre, etc.
Résultat final: une véritable programmation orientée objet-tastic architecture avec plusieurs niveaux d'indirection qui prend des heures à déboguer n'importe quoi. J'ai récemment commencé un travail avec un système de ce type, où la courbe d'apprentissage me l'avait décrit comme "un mur de briques, suivie par une montagne".
Parfois exagérée de la programmation orientée objet, les résultats dans les classes granulaires qu'il en fait un dommage net.
En revanche, de nombreux langages de programmation fonctionnelle, même les OO comme F# et OCaml (et C#!), encourager plat et peu profond hiérarchique. Les bibliothèques dans ces langues ont tendance à avoir les propriétés suivantes:
- La plupart des objets sont POCOs, ou ont tout au plus un ou deux niveaux de l'héritage, où les objets ne sont pas plus que des récipients pour la logique de données.
- Au lieu de classes d'appeler les uns les autres, vous avez des modules (l'équivalent de classes statiques) contrôler les interactions entre les objets.
- Les Modules ont tendance à agir sur un nombre très limité de types de données, et qui ont donc une portée limitée. Par exemple, en OCaml Liste de module représente opérations sur des listes, un Client modules facilite les opérations sur les clients. Alors que les modules ont plus ou moins les mêmes fonctionnalités que les méthodes d'instance d'une classe, la différence essentielle avec le module basé sur les bibliothèques est que les modules sont beaucoup plus autonomes, beaucoup moins précis, et ont tendance à avoir peu ou pas de dépendances sur d'autres modules.
- Il n'y a habituellement pas besoin de la sous-classe des objets de remplacer les méthodes puisque vous pouvez passer autour des fonctions comme des objets de première classe pour la spécialisation.
- Bien que le C# ne prend pas en charge cette fonctionnalité, les foncteurs de fournir un moyen à la sous-classe d'une spécialiser modules.
La plupart des grandes bibliothèques ont tendance à être plus large que profonde, par exemple de l'API Win32, des bibliothèques PHP, Erlang BIFs, OCaml et Haskell bibliothèques, des procédures stockées dans une base de données, etc. Donc ce style de programmation est la bataille de test et semble bien fonctionner dans le monde réel.
À mon avis, les mieux conçus à base de module Api ont tendance à être plus facile à travailler que le mieux conçu de la programmation orientée objet Api. Cependant, le style d'écriture est tout aussi importante dans la conception d'API, donc si tout le monde dans votre équipe est à l'aide de la programmation orientée objet et que quelqu'un s'en va et met en œuvre quelque chose dans un style complètement différent, alors vous devriez probablement demander une réécriture pour mieux correspondre à vos équipes des normes de codage.