【发布时间】:2013-04-07 14:48:45
【问题描述】:
我必须创建一个应用程序,要求我在应用程序中创建一个持久层。该应用程序位于.net 中。我已经创建了一个业务层和一个表示层,但我不知道我应该如何以及为什么要创建一个持久层。
我搜索了一下,发现持久层通常用于存储和检索数据库中的数据。
谁能详细解释一下?
【问题讨论】:
我必须创建一个应用程序,要求我在应用程序中创建一个持久层。该应用程序位于.net 中。我已经创建了一个业务层和一个表示层,但我不知道我应该如何以及为什么要创建一个持久层。
我搜索了一下,发现持久层通常用于存储和检索数据库中的数据。
谁能详细解释一下?
【问题讨论】:
您在数据库引擎和业务/应用程序逻辑之间构建 DAL(数据访问层)或任何其他类型的中间层的原因是,通过在中间层添加此层,您可以隔离其余/上层您现在正在使用的特定数据库引擎/技术的应用程序。
这有几个优点,比如更容易迁移到其他存储引擎,更好地将数据库逻辑封装在单层中(以后更容易替换或修改,具体取决于您设计的跨层接口等...)
在这里查看我的答案,这是一个关于 ASP.NET MVC 和 EF 的示例,但解决方案和项目的结构实际上与技术无关:MVC3 and Entity Framework
还可以阅读一些文章来更好地理解这件事,例如:http://www.developerfusion.com/article/84492/net-and-data-persistence/
【讨论】:
持久层也称为数据访问层或其他术语。
它将获取和保存数据的核心与业务层分开。这样做的原因是您的业务逻辑(为您的数据操作执行繁重工作的应用程序部分)不与特定类型的数据源绑定。
需要将数据层编写为特定于数据库。因此,如果您使用 MySQL 来访问所有数据,那么您将为此编写 dataLayer。
如果您决定迁移到 MongoDB,而不是重写整个应用程序。您可以只重写数据访问部分以从 MongoDB 获取数据。由于业务逻辑并不关心您如何获取数据,只有您这样做,它和 Presenation 层才能保持原样。
希望这会有所帮助。
【讨论】:
用非常简单的术语来说,持久层是一种保存和检索应用程序使用的项目的方法。
一个简单的例子是你有一个代表一个人(姓名、年龄和性别)的类。当您的应用程序运行时,它保存在内存中。但是,假设您希望这些信息在您关闭并再次打开应用程序时可用。好吧,你需要一些方法来保存那个人,然后再检索它。这就是持久层的用武之地,它将把你的人写在“永久”的地方。
这可能是数据库、平面文件、注册表,具体取决于生命周期和要求等。
在您的持久层中,您将执行 CRUD(创建、读取、更新、删除)操作。通常针对数据库,以便您创建一个新人(Fred Bloggs)。假设他们更改了名称,您系统的其他用户可能会读取记录并更改为 Fred Migins 并更新数据库。然后该客户离开该国家/地区,因此您删除他们。
【讨论】:
持久性 = 将记录读/写/删除到磁盘或数据库。
层 = 绝缘等
持久层 = 通常意味着将读/写/删除逻辑与业务逻辑隔离开来。理想情况下,通过在业务逻辑和持久性模块之间放置几个(或单个)交互点。
我认为这是我们都做过的事情(保存到磁盘、数据库等),这只是一个花哨的学术术语,他们只是要求我们这样做:
干杯,
【讨论】:
如果您没有将数据保存在某处,那么当您的应用再次打开时,它就不会再存在了。您可以按照您所说的将其保存到数据库(SQL、Oracle、PostGRE 等),或直接保存到磁盘(以二进制格式或纯文本等序列化)。
使用层来做到这一点是一个很好的做法。它减少了耦合(即意大利面条式代码),并使维护变得更加容易。
我建议您阅读有关 Hibernate 及其 .NET 表亲 NHibernate 的信息。
【讨论】: