如果你是唯一开发项目的人,我会先按照自己的想法来做。在你认为不直观的情况下强制采用某种目录或项目结构是最糟糕的事情。BaseController类是在\Core\文件夹还是\Controller\文件夹中?个人认为应该在Controller文件夹中,但有些人坚信它应该在\Core\或\Bases中。
第一个新手陷阱是认为你可以以错误的方式组织代码,而这些方式会反映在项目的成功上。我见过一个文件夹里有30个文件的项目,也见过其他项目有20个文件夹和30个文件。
第二个新手陷阱是忘记与其他语言相比,你拥有Visual Studio强大的智能提示、代码导航工具和重构支持的优势。你也有一个编译器,使得放错文件的痛苦程度大大降低。如果你把某个东西放在“错误”的位置,没关系,你总可以找到它并将其拖到需要放置的位置。
说实话,我正在开发一个项目,甚至不确定某些类在我的文件结构中属于哪个位置。Go To Definition/Declaration是我经常使用的键盘快捷方式。因为只有我一个人在处理代码,所以这样做没问题。如果我需要添加另一个开发人员到项目中,我可能会清理一下代码。
个人倾向于将接口与实现类型放在同一个文件夹下。IPaymentGateway与AuthorizeNetGateway和PaypalGateway在同一个文件夹中。如果我不能在解决方案资源管理器侧边栏中同时查看该文件夹中的所有文件,则将所有网关文件移动到\Gateway\文件夹中。
当引入依赖注入时,我建议你只关注命名空间爆炸。最糟糕的事情是用长的using声明和别名来混淆你的引导程序和文件。
ForRequestedType<Customer>
比...更清爽。
using KevDog.Models
using Customer=KevDog.Models.Customer
或者
ForRequestedType<KevDog.Models.Customer>
避免这个问题的另一种方法是在命名时显式表达:Customer,CustomerViewModel,CustomerController,CustomerDataRow,CustomerView。
对于TDD,您几乎必须有两个引导程序来管理具体类型。您真的不希望您的单元测试使用AuthorizeNetGateway:IPaymentGateway,而应该使用StubGateway:IPaymentGateway。
现在我也是DI的新手,因此我倾向于使事情非常简单并模仿101级别的教程和文档。只有在特定情况下需要它并且您确切知道自己在做什么时,才应该使用基于构建配置的动态注入。
我通常也会保留MVC应用程序的默认结构。将代码放在99%的所有教程和视频相同的结构中更容易。
希望这有所帮助。