如何在企业级应用程序中隐藏Web项目的业务逻辑数据

时间:2015-07-27 13:45:16

标签: c# asp.net-mvc entity-framework

我正在使用mvc.net 4创建一个网站,它将通过实体框架6连接到数据库。

我一直在关注

http://www.codeproject.com/Articles/990492/RESTful-Day-sharp-Enterprise-Level-Application#_Toc418969124

他们建议将应用程序拆分为数据层,业务实体,业务逻辑和Web应用程序。

现在,由于我正在制作一个更简单的应用程序,我希望简化制作4个项目,而是创建一个名为“Business”的数据和业务逻辑层,在这种情况下连接到数据库并通过API公开数据。将位于“业务”层,该层将包含其他3个(业务逻辑,业务实体和数据层)。

令我烦恼的是,实体框架会将实体生成为公共实体,因此这是一个明显的问题,因为我希望它能够隐藏在网络应用程序之外。

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

1 个答案:

答案 0 :(得分:3)

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

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

  • 数据层 - 在最低级别,这是数据库的1:1表示。这是您的数据被映射出来并正确规范化的地方等。
  • 业务数据层 - 数据层的一步是业务层(特别是数据组件)。这些数据组件更好地代表了事物在现实世界中的运作方式。从某种意义上说,他们更好地模拟实际发生的事情。
  • 业务逻辑层 - 通常与上述层配对,此层封装了业务数据如何协同工作的逻辑。
  • 演示文稿图层 - 显示以上所有内容"内容。"请注意,此图层可能拥有自己的数据集,因为您显示业务对象的方式可能不会映射1:1,因此可能必须从业务数据转换为实际用户的方式将要查看该数据。

考虑到这一点,您提到您正在使用Entity Framework。实体框架是一个ORM,它将您的对象映射到不兼容的关系类型,在对象中创建一种"数据库" (或者"虚拟对象数据库"正如维基百科所说的那样)。这里要记住的一件事是,EF就是您在系统中管理数据对象的方式。它在许多方面使生活更轻松,但它不是实际的数据。课程是" public"是实体框架的要求,是的,但这并不意味着您需要允许在项目的其他部分访问或使用这些数据对象(尽管有一点需要注意,我将在稍后介绍)。

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

  • 数据对象(使用EF帮助管理/使用它们)
  • 业务层(将数据层转换为业务对象,提供业务逻辑)
  • 查看图层(AKA可能是一个网站) - 利用业务层以一致且有凝聚力的方式向用户显示信息。

我之前的警告 - 请注意下一层确实需要知道关于它下面的图层。如果您从逻辑上考虑这个问题,如果没有数据可以构建,您将如何创建业务层?但是,视图层不应直接直接触及您的数据对象,您的业务逻辑应该(通常)不使用数据对象来做出业务决策。在层之间移动有一种转换步骤。

如果这一切都清楚了,那么,回到你的要求。你分出多少或者不分层,这对设计师来说真的很重要。我已经看到数据层直接与业务逻辑位于同一个项目中 - 特别是如果没有真正的业务逻辑。哎呀,我看到一个非常简单的应用程序将所有内容都放在一个WebApp项目中。你必须仔细思考你的项目目前需要什么,以及如果你以某种方式设计事物会带来什么好处和不利。

要考虑的一些事情:

  • 如果分隔图层,则更改系统会变得更加容易。 (例如,如果添加了一些新的业务逻辑,您就不需要更改数据层来支持它 - 您可以在一个地方更改它)
  • 你拥有的层数越多,就越有可能。#34;玩杂耍。"通常,对此不熟悉的人会看到自己在对象之间来回做很多转换和手动代码。看看像AutoMapper这样的工具来帮助自动化这一点。
  • 如果您只是在学习这项技术,那么就不要花费大量时间来设计这项技术。你的进步会变慢,你可能最终会感到沮丧。
  • 如果您正在处理一个大型企业应用程序(例如,其中一个团队正在处理每个层),或者它可能会发生很大变化,那么拆分它可以真正帮助保持代码模块化并允许每个团队工作,只需要知道其他团队提供的接口。因为它减少了协调,使生活更美好。

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