تمثيل خط أنابيب بسيط لـ .NET.
يمثل سلسلة من الخطوات التي تعمل باستمرار.
يسمح بتقسيم مجموعة كبيرة من التعليمات البرمجية إلى قطع صغيرة لتحسين قابلية القراءة والقابلية للتوسع والاختبار.
بادئ ذي بدء ، يجب عليك إنشاء نوع سيتم تمريره بين خطوات خط الأنابيب:
public class InsurancePremiumModel
{
public decimal TotalPremium { get ; set ; }
}استخدم PipelineBuilder لإنشاء خط أنابيب وملء واحدة بخطوات. على سبيل المثال ، لنفترض أننا نريد حساب قسط التأمين المشترك لمجموعة من العملاء:
var customers = GetCustomers ( ) ;
var customersCount = customers . Count ( ) ;
var builder = PipelineBuilder < InsurancePremiumModel >
. StartWith ( ( model , next ) => {
var basePrice = GetBasePrice ( Options . Ambulance , customers ) ;
var ambulancePremium = _ambulanceService . Calculate ( basePrice ) ;
model . TotalPremium += customersCount * ambulancePremium ;
return next . Invoke ( model ) ;
} )
. AddStep ( ( model , next ) => {
var basePrice = GetBasePrice ( Options . Dental , customers ) ;
var dentalPremium = _dentalService . Calculate ( basePrice ) ;
model . TotalPremium += customersCount * dentalPremium ;
return next . Invoke ( model ) ;
} )
. AddStep ( ( model , next ) => {
var basePrice = GetBasePrice ( Options . HomeCare , customers ) ;
var homeCarePremium = _homeCareService . Calculate ( basePrice ) ;
model . TotalPremium += customersCount * homeCarePremium ;
return next . Invoke ( model ) ;
} ) ;من الممكن وصف خطوة خط الأنابيب كنوع من خلال تطبيق واجهة ipipelinestep. في مثال أدناه ، نقوم بإنشاء RoundoffStep لإيقاف إجمالي قسط التأمين الذي حصلنا عليه:
public class RoundOffStep
: IPipelineStep < PriceModel >
{
public Task < PriceModel > InvokeAsync ( PriceModel input , Func < PriceModel , Task < PriceModel > > next )
{
input . TotalPremium = RoundOff ( input . TotalPremium ) ;
return next . Invoke ( input ) ;
}
private decimal RoundOff ( decimal price )
{
var rem = price % 10 ;
if ( rem == 0 ) return price ;
var result = Math . Round ( price / 10 , MidpointRounding . AwayFromZero ) * 10 ;
return rem < 5 ? result + 10.00m : result ;
}
}لذلك ، يمكنك إضافة خطوة تم إنشاؤها حديثًا إلى Builder مثل هذا:
builder . AddStep < RoundOffStep > ( ) ;للحصول على طريقة استخدام كائن خط الأنابيب بناء خطوط خطوط. بعد ذلك ، يمكنك الاتصال بـ ExecuteSync لخط الأنابيب لأداء جميع الخطوات المضافة:
var pipeline = builder . Build ( ) ;
var result = await pipeline . ExecuteAsync ( new InsurancePremiumModel ( ) ) ;