กรอบตะแกรงการกรอง | การเรียงลำดับ | กร่าง
SieveFramework เป็นเฟรมเวิร์กที่ปรับแต่งได้สูง ซึ่งช่วยให้ผสานรวม Filters, Sorts และ Pagination เข้ากับโปรเจ็กต์ของคุณได้ง่ายขึ้นโดยมีระดับของนามธรรมที่เพียงพอ ภายใต้ประทุนคือ System.Linq.Expressions ช่วยให้บรรลุการดำเนินการใดๆ กับคอลเลกชัน และรับการสนับสนุนดั้งเดิมสำหรับการสืบค้น
| โครงการ | คำอธิบาย |
|---|---|
SieveFramework | โครงการหลักพร้อมฟังก์ชันการทำงานพื้นฐาน |
SieveFramework.AspNetCore | การพึ่งพาที่จำเป็นสำหรับการรวมตะแกรงเข้ากับโปรเจ็กต์ ASP.Net Core |
SieveFramework.AspNetCore.Swashbuckle | การพึ่งพาที่จำเป็นในการรวมตะแกรงเข้ากับกรอบงาน Swagger |
ผู้ให้บริการหลักคือ SieveProvider มันมีเพียงคอลเลกชันของ ModelProvider ที่เก็บข้อมูลเกี่ยวกับแบบจำลองที่เป็นรูปธรรม:
ผู้ให้บริการหลักทำงานร่วมกับเพรดิเคต - คอลเลกชันของการดำเนินการภายใต้ทรัพยากรที่สามารถสืบค้นได้ แต่ละภาคแสดงสามารถดำเนินการแบบสอบถามได้เพียงประเภทเดียวภายใต้ทรัพยากร:
การออกแบบนี้ช่วยมอบหมายการดำเนินการประเภทเดียวกันให้กับผู้ดำเนินการหนึ่งคน และควบคุมทิศทางของการดำเนินการในไปป์ไลน์
รูปแบบของตัวกรองแสดงโดย parsers และใช้ในการผูกจากคำขอสืบค้นโดยใช้เครื่องผูกโมเดลที่กำหนดเอง
[!] ข้อมูลจากเนื้อหาของคำขอจะเชื่อมโยงกับตัวประสานโมเดล ASP.Net ดั้งเดิม
การกำหนดค่าของตัวแยกวิเคราะห์ดั้งเดิมเริ่มต้น:
| นามแฝง | คำอธิบาย |
|---|---|
~ | NODE_DELIMITER - ใช้เพื่อแยกค่าภายในโหนด |
& | OPERATION_DELIMITER - ใช้เพื่อแยกการดำเนินการต่างๆ (ตัวแยกคำค้นหาเริ่มต้น) |
filter= | FILTER - พารามิเตอร์การค้นหามีตัวกรอง |
sort= | SORT - พารามิเตอร์แบบสอบถามมีการเรียงลำดับ |
take= | TAKE - พารามิเตอร์การค้นหามีขนาดที่เลือก |
skip= | SKIP - พารามิเตอร์การค้นหามีขนาดการข้าม |
คุณลักษณะที่วางแผนไว้คือรูปแบบ DeepObject ผยองเพื่อดีซีเรียลไลซ์โมเดลเพื่อสอบถาม
โครงสร้าง: Property NODE_DELIMITER Alias NODE_DELIMITER Value
| นามแฝง (พื้นเมือง) | นามแฝง (DeepObject) | คำอธิบาย |
|---|---|---|
eq | สิ่งที่ต้องทำ | เท่ากับ |
neq | สิ่งที่ต้องทำ | ไม่เท่ากับ |
gt | สิ่งที่ต้องทำ | มากกว่า |
gte | สิ่งที่ต้องทำ | มากกว่าหรือเท่ากับ |
lt | สิ่งที่ต้องทำ | น้อยกว่า |
lte | สิ่งที่ต้องทำ | น้อยกว่าหรือเท่ากับ |
โครงสร้าง: Filter NODE_DELIMITER Alias NODE_DELIMITER Filter
| นามแฝง (พื้นเมือง) | นามแฝง (DeepObject) | คำอธิบาย |
|---|---|---|
and | สิ่งที่ต้องทำ | เชื่อมต่อตัวกรองตาม และ ตรรกะ |
or | สิ่งที่ต้องทำ | เชื่อมต่อตัวกรองตาม หรือ ตรรกะ |
กรองที่ได้รับในตอนแรกโดย
orเงื่อนไขดังนั้นnode~and~node~or~nodeจะเป็น (node~and~node)~or~node
โครงสร้าง: Property NODE_DELIMITER Alias
| นามแฝง (พื้นเมือง) | นามแฝง (DeepObject) | คำอธิบาย |
|---|---|---|
asc | สิ่งที่ต้องทำ | เรียงลำดับจากน้อยไปหามาก |
desc | สิ่งที่ต้องทำ | เรียงลำดับจากมากไปน้อย |
โหนดการเรียงลำดับอาจเชื่อมต่อกันด้วย
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"
} ) ;
} ) ;
}คำอธิบายตะแกรงเติมเต็มรูปแบบผยองด้วยแบบจำลองของตะแกรงที่พิมพ์ดีและรายการคุณสมบัติที่อนุญาตให้เรียงลำดับและกรองสำหรับการทำงานของ API แต่ละรายการ