Si vous êtes le seul à travailler sur le projet, je ferais ce que vous est logique de premier. Rien n'est pire que de vous imposer un répertoire ou une structure de projet que vous trouvez non intuitif. La classe BaseController est-elle dans le dossier \ Core \ ou le dossier \ Controller \? Personnellement, je regarderais dans le contrôleur mais certaines personnes jurent qu'il devrait être dans \ Core \ ou \ Bases.
Le premier piège de débutant pense que vous pouvez organiser votre code dans le mauvais sens et, d'une certaine manière, cela reflète le succès du projet. J'ai vu des projets où 30 fichiers étaient dans un dossier et d'autres projets où il y avait 20 dossiers pour 30 fichiers.
Le deuxième piège newbie oublie que par rapport à d'autres langues, vous avez l'avantage de l'intellisense, des outils de navigation et du refactoring de Visual Studio. Vous avez également un compilateur qui rend le placement d'un fichier beaucoup moins douloureux. Si vous mettez quelque chose dans le "mauvais" endroit, c'est ok, vous pouvez toujours le trouver et le faire glisser là où il doit être. Je vais être honnête, je travaille sur un projet en ce moment et je ne suis même pas sûr où certaines classes résident dans ma structure de fichiers. Aller à Définition/Déclaration sont des raccourcis clavier que j'utilise beaucoup. Parce que c'est seulement moi qui travaille avec le code c'est bien. Si je devais ajouter un autre développeur sur le projet, je nettoierais probablement les choses.
Personnellement, j'ai tendance à placer des Interfaces avec leurs types d'implémentation dans le même dossier. IPaymentGateway est dans le même dossier que AuthorizeNetGateway et PaypalGateway. Si je ne peux pas afficher tous les fichiers de ce dossier en même temps dans la barre latérale de l'explorateur de solutions, je déplace tous les fichiers de passerelle dans un dossier \ Gateway \.
Avec l'injection de dépendances ajoutée au mélange, je vous conseille de ne vous intéresser qu'aux explosions d'espaces de noms. La pire chose que vous pouvez faire est d'encombrer vos amorçeurs et vos fichiers avec de longues déclarations et des alias.
ForRequestedType<Customer>
est plus propre que
using KevDog.Models
using Customer=KevDog.Models.Customer
ou
ForRequestedType<KevDog.Models.Customer>
Une autre façon d'éviter ce problème est d'être explicite lorsque vos choses de nommage: Client, CustomerViewModel, CustomerController, CustomerDataRow, CustomerView
Pour TDD, vous devez presque avoir deux amorçeurs à gérer vos types de béton. Vous ne voulez vraiment pas que vos tests unitaires utilisent AuthorizeNetGateway: IPaymentGateway, plutôt StubGateway: IPaymentGateway.
Maintenant, je suis aussi nouveau chez DI donc je tendance à faire des choses très simples et refléter les 101 tutoriels de niveau et de la documentation. Entrer dans une injection dynamique basée sur une configuration de construction ne devrait être utilisé que lorsqu'une situation spécifique l'exige et vous savez exactement pourquoi vous le faites.
Je garde généralement la structure par défaut pour les applications MVC ainsi. Il est simplement plus facile d'avoir votre code dans la même structure que 99% de tous les tutoriels et vidéos.
Espérons que cela aide.
Mon piège de débutant avec StructureMap était des exceptions d'autorisation de sécurité sous la confiance moyenne. Vous voudrez regarder dans un autre conteneur DI si votre application s'exécute dans des environnements de confiance moyenne. –