Heim  >  Artikel  >  Backend-Entwicklung  >  Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe

Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe

高洛峰
高洛峰Original
2017-03-19 10:34:112897Durchsuche

In diesem Abschnitt wird hauptsächlich die Verwendung von ABP für Hintergrund-Paging sowie die Implementierung der ABP-Hintergrund-Paging-Logik erläutert. Außerdem wird gezeigt, wie Sie X.PagedList für Front-End-Paging verwenden.

Nachdem wir das Hinzufügen, Löschen, Ändern und Überprüfen der Aufgabenliste abgeschlossen haben, sprechen wir über die wesentliche Paging-Funktion.

Zuallererst bin ich sehr froh, dass ABP uns dabei geholfen hat, die Paging-Implementierung zu kapseln, was wirklich rücksichtsvoll ist.

Komm schon, schauen wir uns in diesem Abschnitt an, wie man ABP für das Paging verwendet.

1. Paging-Request-DTO-Definition

DatenübertragungObjekt(Datenübertragung Objekts ) wird zur Datenübertragung auf der Anwendungsschicht und der Präsentationsschicht verwendet.

Die Präsentationsschicht übergibt ein Datenübertragungsobjekt (DTO), um eine Anwendungsdienstmethode aufzurufen. Anschließend führt der Anwendungsdienst eine bestimmte Geschäftslogik über das Domänenobjekt aus und gibt das DTO an die Präsentationsschicht zurück. Auf diese Weise werden die Präsentationsschicht und die Domänenschicht vollständig getrennt. In einer gut geschichteten Anwendung verwendet die Präsentationsschicht Domänenobjekte (Lager, Entitäten) nicht direkt.

Wenn wir eine Paging-Anfrage in der Präsentationsebene haben, müssen wir im Allgemeinen zwei Parameter angeben, einer wird zum Markieren der Seite verwendet und der andere ist die Anzahl der Zeilen pro Seite (normalerweise gibt es einen Konfigurationsdatei Konfiguration).

Da Paging eine sehr häufig verwendete Funktion ist, ist es am besten, wenn wir eine Paging-Anfrage in der Präsentationsschicht haben, über ein entsprechendes DTO zu verfügen, um diese beiden Parameter zu kapseln.

Für uns ist im ABP-Quellcode keine solche öffentliche Klasse gekapselt, aber im ABPZero-Projekt ist das entsprechende Paging-Dto definiert.

Das entsprechende Klassendiagramm lautet wie folgt:

Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe

Seitensortierung und Filterung des entsprechenden Dto-Klassendiagramms

Es ist ersichtlich, dass es Enthält hauptsächlich die folgenden vier gängigen DTO-Definitionen:

  1. PagedInputDto: Paging-Anforderungs-Dto

  2. PagedAndSortedInputDto: Paging-Sortierungs-Dto

  3. PagedSortedAndFilteredInputDto:Seitensortierungsfilter Dto

  4. PagedAndFilteredInputDto: Paging-Filter Dto

Ist es sehr praktisch? Unser Paging ist normalerweise gemischt mit Filterung und Sortierung.

Die folgenden Hauptattribute sind hauptsächlich definiert:

  • MaxResultCount: Die Anzahl der Zeilen pro Seite, die aus der definierten Konfiguration abgelesen werden kann .

  • SkipCount: Die Anzahl der Sprünge. Die allgemeine Berechnungsformel lautet SkipCount=Page*MaxResultCount (Anzahl der Seiten*Anzahl der Zeilen).

  • Filter: Filter String

  • Sortierung: Sortieren nach

Ich werde nicht näher auf die konkrete Implementierung eingehen. Ich glaube, dass Sie sie selbst implementieren können, wenn Sie sich das Klassendiagramm genau ansehen. AbpZero definiert diese öffentlichen Dtos im Dto-Ordner der Anwendungsdienstschicht. Die spezifischen Pfade lauten wie folgt.

Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe

2. So verwenden Sie Paging-DTO

Nehmen Sie unsere Aufgabenliste als Beispiel, wir ändern sie es und erstellen Sie GetTaskInputDto, lassen Sie von PagedSortedAndFilteredInputDto erben, sodass GetTaskInputDto über die Attribute verfügt, die für die Seitensortierung und -filterung erforderlich sind.


public class GetTasksInput : PagedSortedAndFilteredInputDto
{
 public TaskState? State { get; set; }
 public int? AssignedPersonId { get; set; }
}


3. Paginierte Ergebnisse DTO zurückgeben

Abp hat für uns ein generisches PagedResultDto definiert, um die zurückgegebenen Paging-Ergebnisse zu verpacken. Es enthält hauptsächlich zwei Attribute: int TotalCount speichert die Gesamtzahl und IReadOnlyList speichert die zurückgegebene Paging-Ergebnismenge.

4. Implementierung der Paging-Logik der Anwendungsdienstschicht

1. Definieren Sie die

Schnittstelle

PagedResultDto<TaskDto> GetPagedTasks(GetTasksInput input);


2. Implementieren Sie die Schnittstelle in TaskAppService:


public PagedResultDto<TaskDto> GetPagedTasks(GetTasksInput input)
{
 //初步过滤
 var query = _taskRepository.GetAll().Include(t => t.AssignedPerson)
  .WhereIf(input.State.HasValue, t => t.State == input.State.Value)
  .WhereIf(!input.Filter.IsNullOrEmpty(), t => t.Title.Contains(input.Filter))
  .WhereIf(input.AssignedPersonId.HasValue, t => t.AssignedPersonId == input.AssignedPersonId.Value);
 //排序
 query = !string.IsNullOrEmpty(input.Sorting) ? query.OrderBy(input.Sorting) : query.OrderByDescending(t => t.CreationTime);
 //获取总数
 var tasksCount = query.Count();
 //默认的分页方式
 //var taskList = query.Skip(input.SkipCount).Take(input.MaxResultCount).ToList();
 //ABP提供了扩展方法PageBy分页方式
 var taskList = query.PageBy(input).ToList();
 return new PagedResultDto<TaskDto>(tasksCount,taskList.MapTo<List<TaskDto>>());
}


Paging The Die Implementierung ist sehr einfach. Zuerst filtern, sortieren, dann Paging durchführen und schließlich PagedResultDto verwenden, um die Paging-Ergebnisse zu kapseln.

Wenn Sie vorsichtig sind, finden Sie möglicherweise zwei Methoden

und

, die noch nie in Linq verwendet wurden. Ja, dies sind Erweiterungsmethoden, die von ABP bereitgestellt werden. Wenn Sie interessiert sind, können Sie eine verwenden Schauen Sie sich den Quellcode an ist eigentlich sehr einfach, aber wenn wir normalerweise Linq verwenden, können wir möglicherweise nicht daran denken. WhereIfPageByEin paar Fragen hier: QueryableExtensions

Wie viele Abfragen wurden in diesem Code durchgeführt?

代码中使用的是什么分页技术?(真分页?假分页?)

5. 使用X.PagedList进行前端分页

Asp.Net Mvc中进行前端分页有一系列开源实现,在我的Demo中使用的是开源的X.PagedList分页。想了解具体源码,请参考X.PagedList GitHub。

1、请自行在Web项目中安装X.PagedList.Mvc Nuget程序包

Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe

X.PagedList.Mvc Nuget程序包

2、在Controller中使用X.PagedList提供的方法构造分页结果供前端使用

因为我们在应用服务层已经手动实现了分页逻辑,所以按照X.PagedList官网示例,我们需要自行构造StaticPagedList作为返回结果。


 public ActionResult PagedList(int? page)
 {
  //每页行数
  var pageSize = 5;
  var pageNumber = page ?? 1;//第几页
  var filter = new GetTasksInput
  {
   SkipCount = (pageNumber - 1) * pageSize,//忽略个数
   MaxResultCount = pageSize
  };
  var result = _taskAppService.GetPagedTasks(filter);
  //已经在应用服务层手动完成了分页逻辑,所以需手动构造分页结果
  var onePageOfTasks = new StaticPagedList<TaskDto>(result.Items, pageNumber, pageSize, result.TotalCount);
  //将分页结果放入ViewBag供View使用
  ViewBag.OnePageOfTasks = onePageOfTasks;
  return View();
}

从代码中可以看到我们构造完X.PagedList提供的分页结果后放入了ViewBag中,供视图使用。

3、View中添加分页控件

PagedList视图的代码如下:

@using X.PagedList.Mvc;
@using Abp.Web.Mvc.Extensions
@using X.PagedList; 
<link href="~/Content/PagedList.css" rel="external nofollow" rel="stylesheet" />
<ul class="list-group">
 @foreach (var task in ViewBag.OnePageOfTasks)
 {
  <li class="list-group-item">
   <p class="btn-group pull-right">
    <button type="button" class="btn btn-info">Edit</button>
    <button type="button" class="btn btn-success">Delete</button>
   </p>
   <p class="media">
    <a class="media-left" href="#" rel="external nofollow" >
     @*<i class="fa @Model.GetTaskLable(task) fa-3x"></i>*@
    </a>
    <p class="media-body">
     <h4 class="media-heading">@task.Title</h4>
     <span class="text-muted">@task.CreationTime.ToString("yyyy-MM-dd HH:mm:ss")</span>
    </p>
   </p>
  </li>
 }
</ul>
@Html.PagedListPager((IPagedList)ViewBag.OnePageOfTasks, page => Url.Action("PagedList", new { page }))

其中最后一句代码是用来生成分页控件。

最终效果如图:

Einführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe总结

总结

本节主要讲解了如何使用ABP进行后台分页,并顺带讲解了ABP后台分页逻辑的实现方式。同时也演示了如何使用X.PagedList进行前端分页。

Das obige ist der detaillierte Inhalt vonEinführung in die Implementierungsmethode der Paging-Funktion in der ABP-Einführungsreihe. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn