C# 如何在企业级应用程序中从web项目隐藏业务逻辑数据

C# 如何在企业级应用程序中从web项目隐藏业务逻辑数据,c#,asp.net-mvc,entity-framework,C#,Asp.net Mvc,Entity Framework,我正在使用mvc.NET4创建一个网站,它将通过EntityFramework6连接到数据库 我一直在跟踪 他们建议将应用程序分为数据层、业务实体、业务逻辑和web应用程序 现在,由于我正在制作一个更简单的应用程序,我希望简化4个项目,而是制作一个名为“业务”的数据和业务逻辑层,在本例中,该层连接到数据库,并通过API公开数据,该API将位于“业务”层,该层将合并其他3个项目(业务逻辑、业务实体和数据层) 困扰我的是实体框架生成的实体是公共的,所以这是一个明显的问题,因为我希望它对web应用程

我正在使用mvc.NET4创建一个网站,它将通过EntityFramework6连接到数据库

我一直在跟踪

他们建议将应用程序分为数据层、业务实体、业务逻辑和web应用程序

现在,由于我正在制作一个更简单的应用程序,我希望简化4个项目,而是制作一个名为“业务”的数据和业务逻辑层,在本例中,该层连接到数据库,并通过API公开数据,该API将位于“业务”层,该层将合并其他3个项目(业务逻辑、业务实体和数据层)

困扰我的是实体框架生成的实体是公共的,所以这是一个明显的问题,因为我希望它对web应用程序保持隐藏


我应该将所有实体都设置为私有还是在EF6生成的实体和“业务”层之间设置一个项目?

我相信您对关注点的设计和分离与类上的访问修饰符有些困惑

要后退一步并获得高层次的概述,请首先查看典型的应用程序结构

  • 数据层-在最低级别,这是数据库的1:1表示。这是数据映射和正确规范化的地方,等等
  • 业务数据层-业务层(特别是数据组件)是数据层的一个升级。这些数据组件更好地表示“真实世界”中的工作方式,因为它们更好地模拟实际发生的情况
  • 业务逻辑层-通常与上述层配对,该层封装业务数据如何协同工作的逻辑
  • 表示层-显示上述所有“内容”。请注意,该层也可能有自己的数据集,因为您显示业务对象的方式可能不是1:1,因此可能需要从业务数据转换为用户实际查看该数据的方式
考虑到这一点,您提到您正在使用.Entity框架,它将您的对象映射到不兼容的关系类型,创建一种“对象中的数据库”(或维基百科所说的“虚拟对象数据库”)。这里需要记住的一点是,EF只是您在系统中管理数据对象的方式。它在许多方面使生活更轻松,但它不是实际的数据。类是“公共”的事实是EntityFramework的一项要求,是的,但这并不意味着您需要在项目的其他部分中允许访问或使用这些数据对象(不过,我稍后会提出一个警告)

因此,此时,您可以创建一个如下所示的应用程序:

  • 数据对象(使用EF帮助管理/使用它们)
  • 业务层(将数据层转换为业务对象,提供业务逻辑)
  • 视图层(也称为网站)-利用业务层以一致和内聚的方式向用户显示信息
我之前的警告-请注意,上一层确实需要了解它下面的层。如果您从逻辑上考虑,如果没有数据可供构建,您将如何创建业务层?但是,视图层不应直接接触您的数据对象,您的业务逻辑应(通常)不要使用数据对象来做业务决策。在层之间移动有一种转换步骤

如果这一切都清楚了,那么,回到你要问的问题上来。你划分或不划分层的程度实际上取决于你作为设计师。我看到数据层与业务逻辑直接位于同一个项目中——特别是在没有真正的业务逻辑的情况下。见鬼,我看到一个非常简单的应用程序将所有内容都放在si中ngle WebApp项目。你必须思考你的项目目前需要什么,如果你以某种方式设计东西,会有什么好处和坏处

需要考虑的一些事情:

  • 如果您将层分开,那么更改系统就更容易了。(例如,如果添加了一些新的业务逻辑,您不需要更改数据层来支持它-您可以在一个地方更改它)
  • 你拥有的层越多,就越需要“处理”。通常情况下,新手会看到自己在对象之间来回进行大量转换和手动代码。看看像AutoMapper这样的工具可以帮助实现自动化
  • 如果你只是在学习这项技术,不要花太多的时间过度设计它。你的进步会很慢,你可能最终会感到沮丧
  • 如果您正在处理一个大型企业应用程序(例如,一个团队处理每一层)或者,在可能发生很大变化的地方,将其拆分确实有助于保持代码模块化,并允许每个团队在只需要知道其他团队提供的接口的情况下工作。这会减少协调,从而使生活变得更加美好

关于这种类型的设计还有很多其他的文章。我建议你点击谷歌阅读更多。希望这能澄清一些事情!

我相信你对设计和关注点的分离与类上的访问修饰符有点困惑

要后退一步并获得高层次的概述,请首先查看典型的应用程序结构

  • 数据层-在最低级别,这是数据库的1:1表示。这是数据映射和正确规范化的地方,等等
  • 业务数据层-业务层(特别是数据组件)是数据层的一个升级