Penyaringan | Penyortiran | Menyombongkan
SieveFramework adalah kerangka kerja yang dapat disesuaikan dan membantu mengintegrasikan Filter, Pengurutan, dan Paginasi dengan lebih mudah ke proyek Anda dengan tingkat abstraksi yang cukup. Di balik terpal adalah System.Linq.Expressions
membantu mencapai operasi apa pun dengan koleksi dan mendapatkan dukungan asli untuk kueri.
Proyek | Keterangan |
---|---|
SieveFramework | Proyek inti dengan fungsionalitas dasar |
SieveFramework.AspNetCore | Ketergantungan yang diperlukan untuk mengintegrasikan saringan ke proyek ASP.Net Core |
SieveFramework.AspNetCore.Swashbuckle | Ketergantungan yang diperlukan untuk mengintegrasikan saringan dengan kerangka Swagger |
Penyedia utama adalah SieveProvider
. Itu hanya berisi kumpulan ModelProvider
yang menyimpan informasi tentang model konkret:
Penyedia utama bekerja dengan predikat - kumpulan tindakan di bawah sumber daya yang dapat dikueri. Setiap predikat hanya dapat melakukan satu jenis tindakan kueri pada sumber daya:
Desain ini membantu mendelegasikan jenis operasi yang sama kepada satu pelaksana dan mengontrol arah operasi dalam pipeline.
Format filter disajikan oleh parser dan digunakan untuk mengikat permintaan kueri menggunakan pengikat model kustom.
[!] Data dari isi permintaan akan diikat dengan pengikat model ASP.Net asli.
Konfigurasi parser asli default:
Alias | Keterangan |
---|---|
~ | NODE_DELIMITER - digunakan untuk membagi nilai di dalam node |
& | OPERATION_DELIMITER - digunakan untuk membagi operasi yang berbeda (pemisah kueri default) |
filter= | FILTER - parameter kueri berisi filter |
sort= | SORT - parameter kueri berisi jenis |
take= | TAKE - parameter kueri berisi ukuran pilihan |
skip= | SKIP - parameter kueri berisi ukuran lompatan |
Fitur yang direncanakan adalah format angkuh DeepObject untuk membatalkan serialisasi model ke kueri.
Struktur: Property
NODE_DELIMITER
Alias
Value
NODE_DELIMITER
Alias (Asli) | Alias (Objek Dalam) | Keterangan |
---|---|---|
eq | TODO | Sama dengan |
neq | TODO | Tidak sama dengan |
gt | TODO | Lebih besar dari |
gte | TODO | Lebih besar dari atau sama |
lt | TODO | Kurang dari |
lte | TODO | Kurang dari atau sama |
Struktur: Filter
NODE_DELIMITER
Alias
NODE_DELIMITER
Filter
Alias (Asli) | Alias (Objek Dalam) | Keterangan |
---|---|---|
and | TODO | Menggabungkan filter berdasarkan dan logika |
or | TODO | Menggabungkan filter berdasarkan atau logika |
Filter diturunkan terlebih dahulu berdasarkan
or
kondisi sehingganode
~and
~node
~or
~node
akan menjadi (node
~and
~node
)~or
~node
.
Struktur: Property
NODE_DELIMITER
Alias
Alias (Asli) | Alias (Objek Dalam) | Keterangan |
---|---|---|
asc | TODO | Urutkan berdasarkan menaik |
desc | TODO | Urutkan berdasarkan menurun |
Node pengurutan hanya dapat digabungkan dengan logika
and
:
node
~and
~node
public void ConfigureServices ( IServiceCollection services )
{
services . AddSieveProvider ( config =>
{
// WithParser - Add custom Query parser. [NativeQueryParser] is default, no need to register them it's just an example
config . WithParser < NativeQueryParser > ( )
// ForAssemblies - Add assemblies to scan models by attributes [CanSort / CanFilter]
. ForAssemblies ( .. . )
// Fluent models registration
. ConfigureProvider ( provider =>
{
provider . AddModel < TestModel > ( builder =>
{
builder . CanSort ( p => p . TestProperty ) ;
builder . CanFilter ( p => p . TestProperty ) ;
} ) ;
} ) ;
} ) ;
services . AddControllers ( ) ;
}
public class WeatherForecastController : ControllerBase
{
// [1] Accept processor through DI
private readonly ISieveProvider _sieve ;
public WeatherForecastController ( ISieveProvider sieve )
{
_sieve = sieve ;
}
// [2] Wrap processed model's resource with [Sieve] - It will be maped automaticly
[ HttpGet ]
public ActionResult GetCustom ( Sieve < WeatherForecast > model )
{
var rng = new Random ( ) ;
var query = Enumerable . Range ( 1 , 5 ) . Select ( index => new WeatherForecast
{
Date = DateTime . Now . AddDays ( index ) ,
TemperatureC = rng . Next ( - 20 , 55 ) ,
Summary = "Summary" + index
} ) . AsQueryable ( ) ;
// [3] Apply filter to resource
var result = _sieve . Apply ( query , model ) . ToArray ( ) ;
return Ok ( new
{
origin = query . ToArray ( ) ,
result = result
} ) ;
}
}
public void ConfigureServices ( IServiceCollection services )
{
// [1] Must be registered before swagger
services . AddSieveProvider ( ) ;
services . AddControllers ( ) ;
services . AddSwaggerGen ( builder =>
{
// [2] Add configuration for swagger
services . AddSieveDescription ( builder ) ;
builder . SwaggerDoc ( "v1" , new OpenApiInfo
{
Title = "Test" ,
Version = "v1"
} ) ;
} ) ;
}
Deskripsi saringan mengisi skema kesombongan dengan model saringan yang diketik kuat dan daftar properti pengurutan dan pemfilteran yang diizinkan untuk setiap tindakan API.