J'ai une question de conception très générale, mais je vais l'encadrer concrètement avec un exemple. Supposons que vous travailliez sur un logiciel embarqué pour une imprimante numérique.Conception logique versus physique
La machine dispose de 4 têtes d'impression (pour chacune des couleurs C, M, Y, K). Chaque tête d'impression effectue la même tâche: récupérer le toner et le placer sur la page. À l'exécution, nous pourrions organiser notre API de deux manières distinctes. Soit nous suivons une conception logique (aussi appelée "fonctionnelle" ou "process"), de sorte que le logiciel client peut contrôler le processus d'impression sur toutes les têtes d'impression (par exemple, changer la luminosité de toutes les couleurs à la fois). Ou nous suivons une conception physique, de sorte que le logiciel client peut contrôler chaque tête d'impression individuellement (par exemple changer la luminosité de seulement la couleur magenta).
Ceci est un dilemme classique dans la conception de logiciels: soit nous organisons par activité ou par architecture. Par fonction ou par forme. Ma question est la suivante: y a-t-il des critères solides pour choisir l'un plutôt que l'autre? Différents projets choisiront différemment et peuvent tous deux être corrects selon leur propre situation; donc je ne demande pas quel est le meilleur, seulement comment choisir. Par exemple. Je serais intéressé par vos idées sur le couplage lâche, la maintenabilité, la superposition, la conception orientée sur les rôles, les modèles de conception architecturale, etc.