问题标签 [data-layers]

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 回答
415 浏览

entity-framework - 使用实体框架时如何组织模型存储库?

对于如何在使用实体框架的应用程序中组织与数据层的连接(存储库类),我感到两难。

你会怎么写?为什么?

或者

区别在于dataContext对象的使用。

0 投票
2 回答
89 浏览

c# - 一个表有两个模型对象是 LINQ-to-SQL/实体框架的常见做法吗?

使用LINQ-to-SQLEntity Framework时,我可以轻松地为每个处理 CRUD 基础的生成一个类:

并且当我对数据库表进行结构更改时,我可以轻松地重新生成表的模型类(只需在设计器中将其删除并再次将表拖到设计器中)。但是,这当然会覆盖课堂上的所有内容。

因此,为了给每个在我重新生成模型时不会被删除的类添加额外的功能,我发现自己为每个表都有一个额外的模型类,因此两个数据层有效。

这是常见的做法还是有办法向生成的类添加功能,在类的重新生成时不会被覆盖?

0 投票
2 回答
1780 浏览

php - 业务层,数据层,查询放在哪里?

我有一个数据访问层,它为数据库中的每个表都有单独的类。每个类都创建引用表中一行的对象,它们具有创建、更新、删除和获取功能。它们都扩展了一个 DBObj 类。我的问题是,假设我想向 写一个查询SELECT * FROM table,并在一个函数中使用它。把这个放在哪里最好?在业务层还是在各自的数据层类中分组所有相关功能?如果重要的话,它在 PHP 中,使用 MySQL。

0 投票
1 回答
562 浏览

jakarta-ee - Java EE 数据层框架

我试图找出在 Java EE 应用程序服务器的数据层上使用最广泛的框架是什么。

我想知道哪些是在那里使用的以及它们的优点和缺点是什么。

0 投票
1 回答
281 浏览

sql-server - CLR 存储过程

在 ASP.NET 应用程序中,我有少量相当复杂、经常使用的操作来对数据库执行。在这些操作中,几个表中的一个或多个需要基于对某些表的输入参数和值的逻辑评估来更新或插入。我一直保持逻辑和数据访问的分离,所以目前的操作是这样的:

  1. 从客户端收到的请求
  2. 业务层调用数据层从数据库中检索数据
  3. 业务层处理结果并确定执行哪个操作
  4. 业务层调用适当的数据操作
  5. 响应发送给客户端

如您所见,客户端在向数据库发出两个单独的请求时一直在等待。在寻找解决方案时,我找到了 CLR 存储过程,但我不确定我是否对它们的用途有正确的认识。

我已经为上面的代码编写了一个替换,特别是在 CLR SP 中放置了步骤 2-4。我的理解是 SP 将由 SQL Server 在本地执行,并且只对服务器进行一次调用。

我的问题基本上是,这是 CLR SP 的预期用途还是我遗漏了什么?

我意识到这在结构上有点妥协,所以如果有更好的方法来做到这一点,我很乐意听到它。

0 投票
1 回答
3633 浏览

entity-framework - IQueryable 和延迟加载

我很难确定处理这个问题的最佳方法......使用实体框架(和 L2S),LINQ 查询返回 IQueryable。我已经阅读了关于 DAL/BLL 是否应该返回 IQueryable、IEnumerable 或 IList 的各种意见。假设我们使用 IList,那么查询会立即运行,并且该控制不会传递到下一层。这使得单元测试等变得更容易。您失去了在更高级别细化查询的能力,但您可以简单地创建另一个方法,允许您细化查询并仍然返回 IList。还有更多的优点/缺点。到现在为止还挺好。

现在是实体框架和延迟加载。我在 .NET 4/VS 2010 中使用带有代理的 POCO 对象。在表示层中,我这样做:

在这种情况下,GetOrders() 返回 IList,因此它在返回 PL 之前立即执行。但是在下一个 foreach 中,您有延迟加载,它在获取所有 OrderLine 时执行多个 SQL 查询。所以基本上,PL 在错误的层“按需”运行 SQL 查询。

有什么明智的方法可以避免这种情况吗?我可以关闭延迟加载,但是拥有这个每个人都在抱怨 EF1 没有的“功能”又有什么意义呢?而且我承认它在许多情况下都非常有用。所以我看到了几个选择:

  1. 以某种方式删除实体中的所有关联并添加方法以返回它们。这违背了默认的 EF 行为/代码生成,并且使得执行一些复合(多实体)LINQ 查询变得更加困难。这似乎是倒退了一步。我投反对票。
  2. 如果我们仍然有延迟加载,这使得单元测试变得困难,那么就一直返回 IQueryable。您将拥有更多的控制权。我仍然认为这不是一个好的选择,因为 IQueryable 将您与 L2S、L2E 或您自己的 IQueryable 完整实现联系在一起。延迟加载可能会“按需”运行查询,但不会将您绑定到任何特定界面。我投反对票。
  3. 关闭延迟加载。您必须手动处理您的关联。这可能是急切加载的 .Include()。在某些特定情况下,我投赞成票。
  4. 保持 IList 和延迟加载。在很多情况下,我投赞成票,只是因为与其他人的麻烦。

还有其他选择或建议吗?我还没有找到真正让我信服的选项。

0 投票
1 回答
717 浏览

iphone - 围绕 iPhone 开发的 JSON API 设计 DAO

所以我一直在尝试设计一种简洁的方式来为我在 iPhone 领域的模型获取数据。我的应用程序的所有数据都来自 JSON API。

所以现在当 VC 需要一些模型时,它会自己调用 JSON(异步),当它接收到数据时,它会构建模型。它可以工作,但我正在尝试一种更简洁的方法,DAO 为我检索信息并返回模型,所有这些都以异步方式进行。

我最初的想法是为我的 DAO 构建一个协议,这样 VC 将实例化一个 DAO 并使自己成为委托。当您请求数据 [DAOinstance getAllUsers] 时,DAO 将完成所有网络请求,然后当它拥有数据时,它会调用其委托(VC)上的方法来传递数据。

所以我认为这是一个很酷的解决方案,但我意识到如果我需要在同一个 VC 中将同一个 DAO 用于不同的目的,我的委托方法必须根据哪个 DAO 实例发起请求来分支逻辑。

所以我的第二个想法是能够以典型的 javascript 模式将“处理程序”选择器传递给 DAO 对象。所以不是官方协议,我会说类似 [DAOinstance getAllUsersWithSelector:"TheHandlerFunctionOnMyVC:"] 这样当 DAO 完成其网络活动时,它会调用 VC 上传递的选择器,并将数据传回。

那么我在这里完全走错了方向吗?似乎是一个不错的方法。

任何关于设计这种数据层的指针或文章都会很不错。

谢谢!鲍勃

0 投票
2 回答
526 浏览

design-patterns - 在设计 DataLayer 或任何其他分层架构时如何处理异常

我正在创建一个数据访问层,我想在其中处理应由业务层捕获的异常,并清楚地了解异常的来源。我正在做这样的事情..

编辑

在上面给出的代码中,我知道异常的原因。并想把它扔到BL处理来显示消息。

但是我在 DL 中仅使用其他一些代码行来使用此功能。

OpenConnection()现在,如果在尝试打开连接时发生异常,则应用程序throw ex在 OpenConnection 本身的行中崩溃,而我期望它返回异常。我应该如何处理这个问题。此外,如果发生异常,则在第二个函数中扩展我的问题,GetDataTable应该抛出什么样的异常,其细节与此时发生的相同以及如何发生。我只知道这种方式,但这是我认为的一种方式。

编辑

假设与服务器的连接丢失或我使用了错误的连接字符串。现在我使用 BL 的 GetDataTable 函数。哪里会发生异常,我应该在哪里处理?我想知道DL中出现的问题。考虑到BL不知道DL的代码

0 投票
1 回答
314 浏览

.net - What are options for passing objects between layers when LINQ to SQL is used?

When thinking about traditional layered application design, I often think in terms of 3 layers:

  • The bottom-most layer which actually talks to the database (let's call this the "data access layer"). It returns objects (in some form) to the next layer.
  • The layer above the bottom-most layer (the middle layer, which I'll term the "data layer") takes the objects from the data access layer and returns domain objects to the business layer.
  • The business layer takes the domain objects from the data layer and does things with them.

This is certainly an over-simplified explanation and probably incredibly wrong! :)

Obviously with LINQ to SQL being an ORM, the data access layer is creating LINQ to SQL objects. What is the proper pattern for passing these objects to the middle and top layers?

0 投票
3 回答
860 浏览

c# - 这么多数据访问选项,用什么?

我是一名 asp.net Web 应用程序开发人员,我一直使用带有存储过程的 Enterprise Library DAAB 进行数据访问,具有 4 个单独的层(表示层、自定义类型层、业务逻辑层和数据访问层)。

我的感觉是这种方法浪费了很多时间。

我没有使用过其他访问数据的方法,但肯定有很多方法可以节省开发时间。在搜索时,我读到了这些:

  1. 他们使用存储过程生成整个 DAL 的数据适配器
  2. 具有不同风味的 Linq
  3. 实体框架
  4. 使用 SQLDataSource 和动态数据等数据控件
  5. 其他映射器、代码生成器和实用程序

这么多的选择和我的知识很少,考虑到我的开发可能是快速、可扩展、可重用和符合标准的,我在决定应该采用哪种开发模式时感到困惑。此外,如果我需要使用其他技术,如 silverlight、mvc 框架、服务,我想寻找一种方式,使我的代码库可以与其他技术一起使用。

请指导我并提供帮助。

谢谢