在 3 层应用程序中传输分页数据

Transferring paged data in 3tier application

我不确定是否有这样的问题。但我没有找到它 所以基本上我拥有的是一个 3 层 Web 应用程序 (MVC),其中包含几个定义 BLL 和 DAL 的程序集。 对于定义的每个 Db 实体,我创建了数据传输对象以通过 BL 层,但在某些情况下,我需要 return DataPortion class 中部分形式的数据(定义有限的列表和所有的数量查询检测到数据。 DataPortion接口

public interface IDataPortion<TItem> where TItem : class
{
    IEnumerable<TItem> Items { get; }
    int TotalCount { get; }
}

这里是存储库方法签名的示例,return以这种方式存储数据

IDataPortion<TEntity> Get(int page, int pageSize);
IDataPortion<TEntity> GetByAuthor(string uid, int page, int pageSize);

所以它returns DataPortion 类型到 BL 层。在 return 将数据传输到表示层之前,所有实体都映射到 DTO 对象。但是我应该用这个 DataPortion 做什么呢?我不能绕过 BL 程序集直接从 presentation l-r 引用 DAL。

所以我的问题是:我是否应该像这样为 DataPortion 创建某种 DTO

PagedResult<TItem>
{
    IEnumareble<TItem> Items { get; }
    int TotalCount { get; }
}

然后将其映射到 IDataPortion 实现? 或者我应该避免从 DAL 和 return totalCount 和项目列表分别传输此类数据?通过使用 DataPortion,我试图避免在我的存储库中使用 "FoundedByAuthorAndCreationDateCount" 这样的创建方法或属性。

您不应将模型等数据层组件直接暴露给表示层。为了将数据传输到表示层,您可以使用 DTO、视图模型等。在您的情况下,您可以创建另一个名为 "Crosscutting" 的项目,其中包含助手、视图模型、通用对象、DTO 等。所有其他项目都可以参考至 "Crosscutting"。您可以将 IDataPortion 接口和 DataPortion class 移到那里,以便所有其他项目都可以访问它们。数据层中的模型 classes 和其他项目中的视图模型都可以使用此接口。