问题标签 [data-access-layer]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
477 浏览

user-interface - 需要有关分层解决方案、关注点分离等方面的建议

我们有一个分层的应用程序,或者至少正在过渡到一个,分解如下:

  • 接口(用户接口或应用程序接口,即webservice等)
  • 商业逻辑
  • 数据访问

为了使这个问题的其余部分更加具体,我将描述一个具体的例子。

我们有一个用户界面,它背后有一个控制器对象(业务逻辑层)。该控制器通过另一个对象(数据访问层)与数据库通信。

在给定的上下文中,用户界面允许用户选择一个员工来绑定正在执行的操作。由于有关于用户(实际上是控制器之外的任何世界)可以选择哪些员工的规则,控制器为此提供了两件事:

  • 一个可读的属性,其中包含可供选择的可用员工列表
  • 包含当前选择的员工的读/写属性

用户界面可能会读取列表并使用它来填充组合框。

在此应用程序的版本 1 中,组合框包含员工的识别号 + 员工的姓名。

一切都很好...

...直到版本 1.1,一个错误修复。用户抱怨他无法在Jimmy OlsonJimmy Olson之间进行选择,因为该应用程序无法让他轻松地知道哪个是哪个。他知道销售部门有一个 Jimmy,开发部门有另一个,所以这个 1.1 版本的解决方法是简单地在组合框中添加一个斜线 + 部门名称。在版本 2 中,我们会选择将组合框替换为具有列支持的组合框,删除斜线,但在 1.1 中,选择此选项是为了最大限度地降低出现更多错误的风险。

换句话说,组合框将包含:

  • 1 - 吉米奥尔森/销售
  • 2 - 吉米奥尔森/发展
    • 其他人

但是,用户界面代码没有 SQL 代码,也没有任何方法可以控制该部门,因此我们必须到控制器那里查看代码。控制者不需要部门,说实话,连员工的名字都不需要,身份证号码就够了,所以控制者里面没有任何东西向部门索要或做什么。所以我们必须深入到数据访问层并在那里更改 SQL。

坦率地说,这个解决方案很臭。

如果这个控制器有多个接口,有不同的要求,我们有三种可能的解决方案:

  1. 更改数据访问层以满足多个接口(2 层之外)的(增加/多样化)需求,这意味着所有接口都可能获得它们需要的所有数据,但它们也将获得任何所需的所有数据其他接口的
  2. 添加一些东西,让用户界面告诉数据访问层(仍然是 2 层)它需要什么
  3. 以某种方式使用户界面层获得所需的数据,而无需更改所涉及的控制器或访问层,这听起来像是我们需要更多的数据访问代码,某处。

以上解决方案都感觉不好。

我想知道的是,我们完全偏离轨道了吗?你会怎么做?在上述 3 之下是否有第四和第五种解决方案?

根据这个问题:Separation of Concerns,接受的答案包含以下引用:

关注点分离就是将每个关注点的代码分开。更改接口不应该需要更改业务逻辑代码,反之亦然。

这是否仅仅意味着所有控制器/数据访问层应该为我们提供完成其工作所需的一切(即员工的识别号),然后用户界面应该与数据库对话并询问更多信息关于这些特定的员工

0 投票
5 回答
701 浏览

c# - 在 C# 中构建对象的更好方法

我有一个应用程序,其对象类型继承自包含应用程序对象大部分属性的基类。所有对象类型都存储在数据库的一张表中。“ClassType”列确定了我将 SqlDataReader 行转换为的对象类型。

这是我当前的实现:

我的问题是他们对这种类型的处理有更好的实现吗?

0 投票
3 回答
4636 浏览

unit-testing - 如何正确地对我的 DAL 进行单元测试?

我是单元测试的新手。但是如何对使用 Entity Framework 编写的 DAL 进行单元测试,以便确保我的 DAL 代码正常工作但实际上没有触及数据库?有人可以提供尽可能详细的信息吗?

0 投票
8 回答
11473 浏览

unit-testing - 模拟与测试数据库?

早些时候我问过这个问题如何正确地对我的 DAL 进行单元测试?,我没有回答的一件事是,如果要真正测试我的 DAL 是拥有一个测试数据库,那么模拟与测试数据库的作用是什么?

为了补充这一点,另一个人建议“在单元测试结束时使用事务和回滚,所以数据库是干净的”,即测试数据库。你们如何看待这种测试 DAL 的测试 + 测试 DB + 事务回滚(所以 db 不是真正编写的)方法?

完整地说,我的 DAL 是使用实体框架构建的,数据库中没有存储过程。由于 EF 太新了,我真的需要测试 DAL 以确保它们正常工作。

0 投票
3 回答
1277 浏览

python - Any DAL/ORM on GAE?

Is there any Database Abstraction Layer (DAL) or Object Relational Mapper (ORM) that works on Google App Engine (GAE), and on normal relational databases (RDBS), other than web2py's?

If not, is anybody working on porting one of the existing DAL/ORM to GAE?

0 投票
3 回答
1678 浏览

asp.net - 将 ADODB.Recordset 类型从 .NET 返回到经典 ASP

我有一个 DAL,我想在从经典 asp 执行时返回一个 ADODB.recordset。该对象作为 com 对象公开,我有一个完整的 dal 工作,但我不确定如何返回一个对象,该对象是 .net 可以使用的记录集。

任何帮助都会得到帮助。谢谢!

——尼古拉斯

0 投票
3 回答
2222 浏览

c# - 为什么 Visual Studio 的表适配器查询不返回与它所代表的存储过程相同的数据?

我在 Visual Studio 中使用表适配器来查询我的 SQL Server 2005 数据库中的存储过程。当我通过我的网站应用程序拨打电话时,它什么也不返回。当我通过 SQL Server Manager 进行相同的调用时,它会返回预期的数据。

我在对适配器方法的调用上放置了一个断点,getData并查看了所有参数及其值,并在服务器管理的查询中匹配它们以确保。我正在发送以下查询:

更远

我想我想知道 Visual Studionull在尝试将查询发送到 SQL 服务器之前是否对 's 做了一些事情。如果没有,我该如何解决这个问题?

编辑:所有这些值都由变量传递,我只是在那个断点输入了这些变量中的内容。

0 投票
3 回答
3831 浏览

asp.net - ASP.NET 数据访问层。使用 sqlhelper.cs 不好吗?

我即将开始一个新的.net web 项目。Previsouly 对于我的 n 层 Web 应用程序,我使用“Microsoft 数据访问应用程序块”(sqlhelper.cs) 进行数据访问,然后使用接口类与对象类进行交互。我知道这种技术有点过时了,并且希望随着时代的发展而使用更多的东西。

我研究了 LINQ to SQL 以进行数据访问,但由于缺乏多对多关系而受到限制。实体框架是一种完全不同的方法,似乎有太大的学习曲线。

使用 sqlhelper.cs 类来处理我的数据访问会有什么问题吗?

0 投票
1 回答
826 浏览

asp.net - 如何将 Web 表单保存到 MySQL 数据库中?

我有一个 ASP.Net 表单,我想将它保存到数据库中,有什么想法吗??

0 投票
1 回答
1852 浏览

wcf - WCF/本地数据访问层

我正在寻找一种方法来创建一个数据访问层,该层既可以驻留在服务器上并通过 WCF 服务访问,也可以驻留在本地计算机上,在这种情况下,它可以直接访问,而无需通过 iis 运行。有没有一种方法可以通过配置文件将其从本地更改为 WCF 版本?