C# Net具有更好的项目结构

C# Net具有更好的项目结构,c#,asp.net,entity-framework,asp.net-mvc-4,C#,Asp.net,Entity Framework,Asp.net Mvc 4,当创建一个带有数据库的ASP.NETMVC项目时,我是否可以在开始时创建一个DAL类库,其中包含模型类和对数据库的访问,然后将该库添加到Web项目中?在Models文件夹中的Web项目中编写实体是否更好? 我想先创建EF代码我将实体、DbContext和存储库类放在一个单独的程序集(域)中,并从web应用程序引用它们。如果它是一个足够小的应用程序,那么web应用程序中的域文件夹就足够了。这完全是为了组织 我不建议尝试将所有内容从实体框架中抽象出来。这涉及到大量相对复杂的代码,或者牺牲了EF可以为

当创建一个带有数据库的ASP.NETMVC项目时,我是否可以在开始时创建一个DAL类库,其中包含模型类和对数据库的访问,然后将该库添加到Web项目中?在Models文件夹中的Web项目中编写实体是否更好?
我想先创建EF代码

我将实体、DbContext和存储库类放在一个单独的程序集(域)中,并从web应用程序引用它们。如果它是一个足够小的应用程序,那么web应用程序中的域文件夹就足够了。这完全是为了组织

我不建议尝试将所有内容从实体框架中抽象出来。这涉及到大量相对复杂的代码,或者牺牲了EF可以为您的项目提供的性能和功能

例如,在我的例子中,web项目和域程序集都包含对EF的引用。这是因为我的存储库类在其方法中返回
IQueryable
,我的控制器还负责绑定DbContext的工作单元。要利用这一点,web项目将需要对EF的引用。我见过许多尝试将EF抽象出来,这样web项目就不需要引用实体框架。在复杂的代码中,这是一个巨大的浪费,或者牺牲了EF为一个项目所能做的那么多。例如,您可以引入复杂的参数,如
Func
来执行筛选,然后还需要担心表达式排序、分页、即时加载、,或者通过让您的域程序集类(服务或存储库)返回DTO或分离的实体,取消了根据环境需要减少EF查询的灵活性和性能。这会导致大量样板代码和/或严重的性能缺陷


因此,简而言之,在考虑是否将功能分解为单独的程序集时,重要的是考虑想要这样做的原因。总的来说,追求简单是我能给出的最好建议。

这是一个意见问题,但我的意见是,你应该从最简单的方式开始。您可以随时在以后重构。