0

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

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

基本上,我试图从数据库中检索属于某个定价阈值的产品列表。目前,我的数据层中有一个函数,它基本上返回价格 > 最小阈值和价格 < 最大阈值的所有产品。但这让我觉得这可能是不正确的。数据层是否应该简单地返回所有产品的列表,然后业务逻辑进行过滤?

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

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

谢谢

4

2 回答 2

1

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

拥有“数据层”或“模型”的目的是,如果需要,您可以相对轻松地将持久层换成完全不同的东西,让一切正常工作。

也就是说,我通常会在我的模型中包含过滤返回的记录集的功能,例如:

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

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

于 2013-11-01T09:50:40.170 回答
1

数据层的目的是与数据存储库进行数据相关的交互。如果你想变得非常纯粹,你可以将你的数据层分成两部分:数据抽象D层和数据独立层。DIL 负责为您正在连接的数据存储库组装正确的查询(例如,您可以选择 SQL Server 或 Oracle),而 DAL 位于 DIL 之上并调用适当的方法来获取它的数据需要(例如,它可能指定要调用的存储过程或要查询的表/视图,但 DIL 负责实际执行调用)。ALDIL

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

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

我使用数组作为返回类型,因为几乎所有语言都有它(你没有指定你正在使用哪种语言),这也是使用decimal类型作为阈值的原因。

于 2013-11-01T10:08:52.090 回答