45

我必须创建一个应用程序,要求我在应用程序中创建一个持久层。该应用程序位于.net 中。我已经创建了一个业务层和一个表示层,但我不知道如何以及为什么应该创建一个持久层。

我用谷歌搜索并知道持久层通常用于存储和检索数据库中的数据。

谁能详细解释一下?

4

5 回答 5

35

您在数据库引擎和业务/应用程序逻辑之间构建 DAL(数据访问层)或任何其他类型的中间层的原因是,通过在两者之间添加此层,您将应用程序的其余/上层与您现在正在使用的特定数据库引擎/技术。

这有几个优点,比如更容易迁移到其他存储引擎,在单层中更好地封装数据库逻辑(更容易替换或修改,具体取决于您设计的跨层接口等...)

在这里看到我的答案,这是一个关于 ASP.NET MVC 和 EF 的示例,但解决方案和项目的结构实际上是技术独立的:MVC3 和实体框架

还可以阅读一些文章以更好地理解这件事,例如: http: //www.developerfusion.com/article/84492/net-and-data-persistence/

于 2013-04-15T13:18:57.233 回答
26

持久层也称为数据访问层或其他术语。

它将获取和保存数据的内容与业务层分开。您这样做的原因是您的业务逻辑(应用程序中为您的数据操作执行繁重工作的部分)不依赖于特定类型的数据源。

需要将数据层编写为特定于数据库。因此,如果您使用 MySQL 来访问所有数据,那么您将为此编写 dataLayer。

如果在某个时候您决定迁移到 MongoDB,那么不要重写整个应用程序。您可以只重写数据访问部分以从 MongoDB 获取数据。由于业务逻辑并不关心您如何获取数据,只有您这样做,它和 Presenation 层才能保持原样。

希望这可以帮助。

于 2013-04-15T13:16:12.427 回答
18

用非常简单的术语来说,持久层是一种保存检索应用程序使用的项目的方法。

一个简单的例子是你有一个代表一个人(姓名、年龄和性别)的类。当您的应用程序运行时,它保存在内存中。但是,假设您希望该信息在您关闭并再次打开应用程序时可用。好吧,你需要一些方法来保存那个人,然后再找回它。这就是持久层的用武之地,它将把你的人写在“永久”的地方。

这可能是数据库、平面文件、注册表,具体取决于生命周期和要求等。

在您的持久层中,您将执行 CRUD(创建、读取、更新、删除)操作。通常针对数据库,因此您将创建一个新人(Fred Bloggs)。假设他们更改了他们的名称,您系统的另一个用户可能会读取记录并更改为 Fred Migins 并更新数据库。然后该客户离开该国家/地区,因此您将其删除

于 2013-04-15T13:14:48.077 回答
11

持久性 = 将记录读/写/删除到磁盘或数据库。

层=绝缘等。

持久层=通常意味着将读/写/删除逻辑与业务逻辑隔离。理想情况下,通过在业务逻辑和持久性模块之间放置几个(或单个)交互点。

我认为这是我们都做过的事情(保存到磁盘、数据库等),这只是一个花哨的学术术语,他们只是要求我们:

  1. 确保持久性部分很好地组合在一起,
  2. 理想情况下,业务逻辑(即网关模式)之间的交互点很少(或恰好是单个),
  3. 所以将来也许我们想切换数据库类型或主机(即更小的范围——我们只需要绕过持久性部分来让它运行)。

干杯,

于 2016-08-15T10:33:59.630 回答
5

如果您没有将数据保存在某处,那么当您的应用再次打开时,它就不会再存在了。您可以按照您所说的将其保存到数据库(SQL、Oracle、PostGRE 等),或直接保存到磁盘(以二进制格式或纯文本等序列化)。

使用层来做到这一点是一个很好的做法。它减少了耦合(即意大利面条代码),并使维护更加容易。

我建议您阅读有关 Hibernate 和它的 .NET 表亲 NHibernate 的信息。

于 2013-04-15T13:18:36.777 回答