Asp.net mvc 构建新的大型ASP.NET MVC2 plus EF4 VS2010解决方案的最佳实践?

Asp.net mvc 构建新的大型ASP.NET MVC2 plus EF4 VS2010解决方案的最佳实践?,asp.net-mvc,entity-framework,visual-studio-2010,asp.net-mvc-2,entity-framework-4,Asp.net Mvc,Entity Framework,Visual Studio 2010,Asp.net Mvc 2,Entity Framework 4,我们正在使用Microsoft ASP.NET MVC2和Entity Framework 4构建一个新的web应用程序。虽然我确信我的问题没有一个正确的答案,但我们正在努力商定VS2010解决方案结构 该应用程序将使用SQL Server 2008和未来可能的Azure云版本。我们将EF4与T4 POCO一起使用(型号优先),并访问许多第三方web服务。我们还将连接到多个外部消息传递系统。UI基于标准ASP.NET(MVC)和jQuery。将来,我们可能会提供Silverlight/WPF版本

我们正在使用Microsoft ASP.NET MVC2和Entity Framework 4构建一个新的web应用程序。虽然我确信我的问题没有一个正确的答案,但我们正在努力商定VS2010解决方案结构

该应用程序将使用SQL Server 2008和未来可能的Azure云版本。我们将EF4与T4 POCO一起使用(型号优先),并访问许多第三方web服务。我们还将连接到多个外部消息传递系统。UI基于标准ASP.NET(MVC)和jQuery。将来,我们可能会提供Silverlight/WPF版本,以及移动版

简单地说,我们从VS2010空白解决方案开始-然后呢?我建议使用4个文件夹数据(EF edmx文件等)、域(实体、存储库)、服务(web服务访问)、表示(web ui等)。然而,在演示文稿中,创建ASP.NET MVC2项目显然会创建它自己的模型文件夹等,而且它似乎不太适合这个建议的结构。我还缺少一个业务层(或者这是否位于域中?)

再次重申,我确信没有一种正确的方法可以做到这一点,但我真的很感激你对这一点的看法


谢谢

什么对您和您的团队有意义?

代码所在的文件夹没有任何意义(除了较小的命名空间生成),可以通过拖放轻松更改

现在,组织几乎无关紧要,你的文件太少了,很容易在网上浏览。一旦你进入公司6个月,你就有了1000多个文件,这时你需要开始考虑组织


对于我自己的个人项目,我将所有内容都转储到一个项目中,在工作中我有17个项目解决方案和50个文件夹。代码是代码。

我认为在这个早期阶段考虑项目结构(和命名空间)是正确的。尽管jfar的观点已经很好地阐述了,但在第一次发布之前,您有多少机会重新构建项目和名称空间?即使是你建议的东西也比把所有东西都投入到同一个项目中要好——当然?

Jfar是正确的。此时,您的解决方案采用什么结构并不重要。以后您将有足够的时间重新安排解决方案。我已经完成了许多小型MVC应用程序和一个大型MVC应用程序,我仍在改进我更喜欢的项目/解决方案结构

就结构化和MVC项目而言,唯一真正重要的文件夹是视图。我已经开始脱离/Controllers和/ViewModels文件夹结构,按照域概念对事物进行分组。如果Student是您的域概念之一,我会在域项目、MVC视图文件夹、服务项目等中有一个Student文件夹。所有域类、视图模型、控制器等都将位于相同的文件夹名称下(在不同的项目中)。这样,如果您想要修改与学生相关的代码,您总是可以直接知道到哪里去


此外,我们还有一个承载视图的Web项目和一个包含控制器的独立类库项目。我的大多数解决方案都有12-30个项目。

您可以观看Rob Connery的视频,了解如何构建您的MVC项目:


HTH

想要添加-如何组织文件夹/解决方案并不重要,重要的是如何组织代码


因此,如果你的应用程序没有使用像依赖项反转这样的奇特技术进行适当的分层,那么它就不整洁,也不可测试——如果你把糟糕的代码放在一两个文件夹中,那也没关系。您将无法从sql迁移到Azure,也无法从mvc迁移到silverlight。

“此外,我们有一个承载视图的Web项目和一个包含控制器的单独类库项目。”您认为这样好吗?控制器使用system.web、system.web.mvc、路由和类似的名称空间,这些名称空间很可能在web项目中找到。我只是更喜欢没有引用system.web或system.web.mvc的类库,我一直在努力实现这一点。“我的大多数解决方案都有12-30个项目。”嗯?再说一次,这真的有必要吗?不,没有必要把每件事都分割成单独的项目,但这对TDD来说真的很好。在每次测试迭代过程中,您将东西组合在一起的次数越多,构建时间就越长,这意味着生产率越低。30项目解决方案包括一个遗留WebForms应用程序、新的MVC组件、两个后台服务、三个独立的域、两种不同的数据访问策略(NH和L2S),以及所有测试和设置项目。这是一个遗留的烂摊子。如果我们可以从头开始,我们会把它们分开,但现在把它们放在一起是最容易的。此外,有时我们的项目只有一个类,但它是我们自己的代码和第三方库之间的一个垫片。我们宁愿使用包装器接口编写代码,以便以后可以交换库。将垫片放在另一个项目中会迫使我们写入接口。例如,我们的许多项目都需要流媒体市场报价,因此我们写信给IStreamingQuotesProvider,然后我们必须与DTN、Prophetex和BarChart合作,因为不同的部门有不同的订阅,但它们都使用共享域。跟进:我不再做大规模解决方案。我们仍然有垫片,但由于nuget,我们保持了这些版本的独立性,并在内部以nuget软件包的形式发布垫片。而且,由于今天的硬件速度快得多,我不再觉得在做TDD的时候需要把事情分开太多。。。有人能具体说明生成edmx文件的位置吗?您是将其放在asp.net mvc项目中还是放在单独的类库中?好的,我发现了一个关于上述内容的问题: