Ce que vous avez fait est exactement ce que vous devriez faire : donner à vos classes le moins de visibilité possible. Si vous voulez vraiment aller jusqu'au bout de votre démarche, vous pouvez faire en sorte que tout internal
(tout au plus) et utiliser le InternalsVisibleTo
attribut afin que vous puissiez séparer votre fonctionnalité sans l'exposer au monde extérieur inconnu.
La seule raison de rendre les choses publiques est que vous empaquetez votre projet dans plusieurs DLLs et/ou EXEs et (pour une raison ou une autre) vous ne voulez pas utiliser la fonction InternalsVisibleTo
ou vous créez une bibliothèque destinée à être utilisée par des tiers. Mais même dans une bibliothèque destinée à être utilisée par des tiers, vous devez essayer de réduire la "surface" autant que possible ; plus vous avez de classes disponibles, plus votre bibliothèque sera confuse.
En C#, un bon moyen de s'assurer que vous utilisez la visibilité minimale possible est de ne pas utiliser les modificateurs de visibilité jusqu'à ce que vous en ayez besoin. En C#, la visibilité par défaut est la plus faible possible : internal pour les classes, et private pour les membres des classes et les classes internes.