2017-12-07 10 views
0

をソートやフィルタリング、ページングの分離:私がいた、私のコードを確認した私は、ページングするための方法を持っていたサービスを持っているソートや車のフィルタリングを作り、私のASP.NET MVCアプリケーションで

 public class VehicleService : IVehicleService 
{ 
    private readonly DbContext _context; 

    public VehicleService(DbContext context) 
    { 
     _context = context; 
    } 

     public async Task<IPagedList<VehicleMake>> GetVehicleMakesWithPaginationAsync(string search, int? page, string sort) 
    { 
     var makes = _context.VehicleMakes.AsQueryable(); 

     switch (sort) 
     { 
      case "Name desc": 
       makes = makes.OrderByDescending(x => x.Name); 
       break; 
      default: 
       makes = makes.OrderBy(x => x.Name); 
       break; 
     } 

     return await makes.Where(x => x.Name.StartsWith(search) || search == null).ToPagedListAsync(page ?? 1, 5); 
} 
} 

ソート、フィルタリング、およびページングは​​、インタフェースを持つ別々のクラスになければならないと述べました。

が並べ替え::私は次のようにすることを実現し

internal class Sorting : ISorting 
{ 
    private readonly DbContext _context; 

    public Sorting(DbContext context) 
    { 
     _context = context; 
    } 

    public IEnumerable<VehicleMake> SortMakes(string sort) 
    { 
     var makes = _context.VehicleMakes.AsQueryable(); 

     makes = sort == "Name desc" ? makes.OrderByDescending(x => x.Name) : makes.OrderBy(x => x.Name); 
     return makes; 
    } 
} 

ページング:

class Paging : IPaging 
{ 
    private readonly ISorting _sorting; 

    public Paging(DbContext context) 
    { 
     _sorting = new Sorting(context); 
    } 

    public async Task<IPagedList<VehicleMake>> GetPagedListOfSortedMakes(string search, int? page, string sort) 
    { 
     var sortedMakes = _sorting.SortMakes(sort).AsQueryable(); 
     return await sortedMakes.Where(x => x.Name.StartsWith(search) || search == null).ToPagedListAsync(page ?? 1, 5); 
    } 
} 

そして、私のサービスで:これはうまく機能

public class VehicleMakeService : IVehicleMakeService 
{ 
    private readonly DbContext _context; 
    private readonly IPaging _paging; 

    public VehicleMakeService(DbContext context) 
    { 
     _context = context; 
     _paging = new Paging(context); 
    } 

    public async Task<IPagedList<VehicleMake>> GetVehicleMakesWithPaginationAsync(string search, int? page, string sort) 
    { 
     return await _paging.GetPagedListOfSortedMakes(search, page, sort); 
    } 
} 

、しかし、もし私がimpかどうか分からないこれを正しく癒した。これを行うにはより良い(クリーナー)方法がありますか?

+0

これは、あなたのコードレビュー担当者との良い質問/議論のようです。優れたコードレビュー担当者は指導者とコーチとして行動し、方向性と推論を提供することができます。個人的な意見としては、機能を独自のクラス/インタフェースに抽出する必要がある、または望ましい場合がありますが、これがこれらのケースの1つであるかどうかはわかりません。しかし、再度、あなたのチームメート/アーキテクト/コードレビュアーとのディスカッションに参加してください。そして成功を祈る! –

+0

https://codereview.stackexchange.com/でこの質問をすることができます。 –

答えて

関連する問題