C# 实体数据框架和Web应用程序体系结构

C# 实体数据框架和Web应用程序体系结构,c#,.net,entity-framework,n-tier-architecture,C#,.net,Entity Framework,N Tier Architecture,我正在创建一个web应用程序,并首先使用实体框架。我创建了实体数据模型,现在我不确定如何继续。 前提:我的数据库非常简单(评级、网页、访问者),数据库表与业务对象相对应 我的建议是3层架构,但如何实现 最好创建与实体框架对象(评级、访问者)同名的分部类,并在此处声明新方法(GetAverageRating()…)?还是最好在这里创建一些VisitorProvider、RatingProvider和place逻辑 最好在BLL和表示层中使用EF对象,否则我应该在BLL层上创建自己的BO对象,并将E

我正在创建一个web应用程序,并首先使用实体框架。我创建了实体数据模型,现在我不确定如何继续。

前提:我的数据库非常简单(评级、网页、访问者),数据库表与业务对象相对应

我的建议是3层架构,但如何实现

  • 最好创建与实体框架对象(评级、访问者)同名的分部类,并在此处声明新方法(GetAverageRating()…)?还是最好在这里创建一些VisitorProvider、RatingProvider和place逻辑

  • 最好在BLL和表示层中使用EF对象,否则我应该在BLL层上创建自己的BO对象,并将EF对象转换为BO

  • 我认为,在DAL上使用静态方法比在BLL上实例化类更实际。你同意吗


  • 你能给我推荐一些最佳做法吗?我对如何创建它有很多想法,但我不知道什么是正确的。

    3层架构非常流行,但它真正的含义是什么

  • 表示层
  • 应用层
  • 数据库层
  • 如果你问每一层意味着什么,你可以非常肯定你会得到几个不同的答案。您可以进一步将每个层划分为子层,并构建分层地狱式:

  • 客户端表示层
  • 服务器端视图层
  • 控制器层
  • 服务外观层
  • 服务层
  • 域对象层
  • 存储库+工厂层
  • ORM层
  • 存储过程层
  • 数据库视图层
  • 数据库表层
  • WTF?这只是一个应用程序很容易被过度架构的例子。如果坚持只有邻居可以交换数据,并且决定添加特殊类型的对象在层之间交换,而不是在多个层中流动一组对象,则情况可能会更糟

    添加您需要的层,使您能够更轻松地开发应用程序,并将应用程序的规模所需的关注点和可维护性合理地分离。您可以简单地执行最简单的应用程序,该应用程序只需使用几周,并且必须尽快开发。在这种情况下,只需使用ASP.NET web表单和数据源控件(或ASP.NET动态数据),您就可以在几天内完成这项工作。它的可扩展性很差,但在这种情况下,它正是快速实现应用程序所需要的。如果您需要的话,编写层和做所有关于可维护性和可扩展性的事情都是合理的。另一种快速原型技术是ASP.NET MVC Scaffolding,它可以创建应用程序的快速多层框架,可以进一步修改

  • 两种方法都是正确的,这只取决于您喜欢的方法。第一个被称为实体框架,但它并不经常与实体框架一起使用。第二种方法更受欢迎。您可以直接在您称之为
    提供者
    (通用名称也是
    服务
    )的中产阶级中使用EF。此类将执行数据访问逻辑和业务逻辑。在更复杂的应用程序中,开发人员喜欢以某种方式包装EF以分离类,并从服务或直接从web应用程序调用存储库。代码隐藏或控制器(取决于业务逻辑的数量)。首先尝试在没有存储库的情况下执行此操作。我个人的观点是,人们应该在了解EF本身之后才开始使用存储库
  • 同样,这两种方法都是正确的。在一个简单的应用程序中,完全可以使用POCO类(EFv4.x)创建EF模型并在所有层中使用它们。如果您使用的是ASP.NET MVC,您会发现您需要特殊的类作为视图模型,以充分表示您个人视图的需求。在更复杂的应用程序中,您可以从业务层中公开单独的对象,尤其是当业务层作为远程服务(WCF)公开时
  • 这取决于您如何编写这些DAL方法-它是!这还取决于您是否要编写一些测试。由静态方法定义的层直接与可测试体系结构相违背,在可测试体系结构中,您只需要对单层进行单元测试(使用EF进行单元测试可能很困难)。它还取决于您是否希望使用基于实例的依赖项注入
    3层架构非常流行,但它真正的含义是什么

  • 表示层
  • 应用层
  • 数据库层
  • 如果你问每一层意味着什么,你可以非常肯定你会得到几个不同的答案。您可以进一步将每个层划分为子层,并构建分层地狱式:

  • 客户端表示层
  • 服务器端视图层
  • 控制器层
  • 服务外观层
  • 服务层
  • 域对象层
  • 存储库+工厂层
  • ORM层
  • 存储过程层
  • 数据库视图层
  • 数据库表层
  • WTF?这只是一个应用程序很容易被过度架构的例子。如果坚持只有邻居可以交换数据,并且决定添加特殊类型的对象在层之间交换,而不是在多个层中流动一组对象,则情况可能会更糟

    添加您需要的层,使您能够更轻松地开发应用程序,并将应用程序的规模所需的关注点和可维护性合理地分离。您可以简单地执行最简单的应用程序,该应用程序只需使用几周,并且必须尽快开发。在这种情况下,只需使用ASP.NET web表单和数据源控件(或ASP.NET动态数据),您就可以在几天内完成这项工作。它的可扩展性很差,但在这种情况下,它正是您需要的