数据层的职责是什么



我正在做一个项目,我必须向我的应用程序添加一个数据层。我一直认为数据层纯粹负责 CRUD 函数,即。不应真正包含任何逻辑,而应仅检索数据供业务层操作。

但是,我对我的项目有点困惑,因为我不确定我是否针对这种情况正确构建了我的应用程序。

基本上,我正在尝试从数据库中检索属于特定定价阈值的产品列表。目前,我在数据层中有一个函数,该函数基本上返回价格>最小阈值和价格<最大阈值的所有产品。但这让我想到,也许这是不正确的。数据层是否应该简单地返回所有产品的列表,然后由业务逻辑进行筛选?>

我很困惑数据层是否应该简单地提供允许业务层获取原始数据的方法,或者它是否也应该负责获取过滤数据?

如果有人有一篇文章或东西详细解释这一点,那将非常有帮助。

谢谢

数据层的目的是与数据存储库进行与数据相关的交互。如果你想变得真正纯净,你可以将数据层分为两部分:D ata A bstraction L ayer 和 D ata I ndependence L ayer。DIL 负责为您要连接的数据存储库组装正确的查询(例如,您可能提供 SQL Server 或 Oracle 的选择),而 DAL 位于 DIL 之上并调用适当的方法来获取所需的数据(例如,它可以指定要调用的存储过程或要查询的表/视图, 但 DIL 负责实际执行呼叫)。

在您的情况下,我会删除数据层的过滤器,即调用者应该传入阈值。在伪代码中,方法签名如下所示:

public YourDataObjects[] GetProducts(decimal lowerPrice, decimal upperPrice) { ... }

我为返回类型使用了一个数组,因为几乎所有语言都有它(您没有指定您使用的语言),这也是将decimal类型用于阈值的原因。

这里没有真正的正确或错误的方法,它通常归结为最适合您的实现的方法。

拥有"数据层"

或"模型"的目的是,如果需要,您可以相对轻松地将持久性层换成完全不同的东西,并使一切正常工作。

也就是说,我通常会将筛选返回的记录集的功能作为模型的一部分,如下所示:

public IEnumerable<object> getAllRows()
public object getSingle(object o)
public IEnumerable<object> getFilteredRows(Expression<object> e)

用于筛选结果的表达式将在业务层(控制器)中生成,但实际执行将由数据稍后(模型)处理。

相关内容

  • 没有找到相关文章

最新更新