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