【问题标题】:What details should be hidden in the Data Access Layer?数据访问层应该隐藏哪些细节?
【发布时间】:2012-03-19 10:50:08
【问题描述】:

我正在创建一个 数据访问层 (DAL) 来读取/修改一些存储在 XML 文件中的表。在我的应用程序运行时,这些表的行会经常更新,因此我考虑了两种可能的替代方案:

  1. 当应用程序启动时,我可以通过 DAL 加载表中的所有数据,并将它们放入一个数据结构中,例如 Dictionary。在应用程序运行时,此字典会不断更新。当应用程序关闭时,我调用 DAL 的一个方法,以便用字典中的新数据覆盖旧文件。
  2. 将这个字典隐藏到上层可能更正确,所以我可能在 DAL 中有一个 Dictionary 私有字段。这样上层就会调用 DAL 的方法来更新表的行。

也许第二种方法比第一种更好?

【问题讨论】:

  • 读者总是需要最新的价值观吗?或者他们可以对文件有一个“最终一致的”视图吗?另外,作者是否正确锁定文件以防止读取一半写入的数据?
  • 这是一个winforms应用吗? XML 数据是否会存储在某个服务器上,应用程序的多个副本同时访问它?
  • @ChrisShain:唯一的读取器是应用程序本身,它是多线程的,因此不同的线程可以同时读取/写入表(和 XML 文件)。线程(即读者)需要有最新的值。
  • @ChrisLively:这是一个 WPF 应用程序。 XML 文件的单个副本存储在本地应用文件夹中。

标签: c# .net data-access-layer


【解决方案1】:

此处的选项 2 更适合封装,但确实会增加复杂性。字典是您的上层不应该关心的实现细节。相反,您的数据访问层应该公开代表实际表的类 - 例如,您可能有一个 Person 类或 Inventory 类。作为 DAL 类,它们将提供适当的添加、删除、更新、检索等方法。

此外,您将拥有一个域层,该域层对从 DAL 类检索到的行进行操作,该行将添加业务方法(例如,Order 可以由 Person 生成并影响Inventory - 的行为在这些域类上调用方法会深入到 DAL 以实际接触底层数据)。

【讨论】:

  • 这样,所有更新都会更新 DAL 中的字典,然后 DAL 可能会定期更新 XML 文件,而不是在每次更新后更新。
猜你喜欢
  • 2012-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-09-13
  • 2015-04-27
  • 1970-01-01
  • 2021-02-21
相关资源
最近更新 更多