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

时间:2017-07-14 07:43:33

标签: c# asp.net-mvc 3-tier

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

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

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

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

因此它将DataPortion类型返回到BL层。在将数据返回到表示层之前,所有实体都映射到DTO对象。但是我应该怎么做这个DataPortion?我不能直接从演示文稿l-r直接引用DAL绕过BL程序集。

所以我的问题是:我应该为DataPortion创建某种DTO,比如

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

然后将其映射到IDataPortion实现? 或者我应该避免从DAL传输此类数据并单独返回totalCount和项目列表?通过使用DataPortion,我试图避免在我的存储库中创建方法或属性,如“FoundedByAuthorAndCreationDateCount”。

1 个答案:

答案 0 :(得分:1)

您不应直接将数据层组件(如模型)公开给表示层。为了将数据传输到表示层,您可以使用DTO,视图模型等。在您的情况下,您可以创建另一个名为&#34; Crosscutting&#34;包含帮助器,视图模型,通用对象,DTO等。所有其他项目都可以引用&#34; Crosscutting&#34;。您可以在那里移动IDataPortion接口和DataPortion类,以便所有其他项目都可以访问它们。数据层中的模型类和其他项目中的视图模型都可以使用此接口。