如果您是该项目的唯一工作人员,我会首先做对您有意义的事情。没有什么比强加给您不直观的目录或项目结构更糟糕的了。 BaseController 类是在 \Core\ 文件夹还是 \Controller\ 文件夹中?我个人会查看控制器,但有些人发誓它应该在 \Core\ 或 \Bases 中。
第一个新手陷阱是认为您可以以错误的方式组织代码,这在某种程度上反映了项目的成功。我见过一个文件夹中有 30 个文件的项目,而其他项目中有 30 个文件的 20 个文件夹。
第二个新手陷阱忘记了,与其他语言相比,您可以从 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% 的教程和视频具有相同的结构更容易。
希望这会有所帮助。