Stator عبارة عن تجربة بسيطة ومزخرفة موجهًا أو مستوحاة من Redux أو عرض موديل (MVU) باستخدام C# 9.0. إنه يعمل بشكل جيد مع Blazor و MobileBlazorBindings ، بما في ذلك مشاركة الولايات بين جزء Xamarin وجزء Blazor من تطبيق الهاتف المحمول الهجين. يجب أن تعمل أيضًا مع أي نموذج عميل آخر .NET.
اعتبارًا من 2021-04-08 ، لا يدعم المشروع .NET Standard 2.0 ، فقط .NET 5+
يستخدم هذا المشروع:
| اسم | nuget.org | Feedz.io |
|---|---|---|
dotnet add package StateR | ||
dotnet add package StateR.Blazor | ||
dotnet add package StateR.Blazor.Experiments | ||
dotnet add package StateR.Experiments |
تمثل المقتطف التالي ميزة ، تحيط بالعداد ، حيث يمكنك Increment Decrement Set قيمة خاصية Count لهذا Counter.State . وتشمل المقتطف أيضا InitialState لهذا العداد.
services
. AddStateR ( appAssembly )
. AddAsyncOperations ( ) // Add support for Redux thunk-like helpers
. AddReduxDevTools ( ) // Add support for Redux DevTools
. Apply ( )
; using StateR ;
namespace BlazorMobileHybridExperiments . Features
{
public class Counter
{
public record State ( int Count ) : StateBase ;
public class InitialState : IInitialState < State >
{
public State Value => new State ( 0 ) ;
}
public record Increment : IAction ;
public record Decrement : IAction ;
public class Reducers : IReducer < State , Increment > , IReducer < State , Decrement >
{
public State Reduce ( State state , Increment action ) => state with { Count = state . Count + 1 } ;
public State Reduce ( State state , Decrement action ) => state with { Count = state . Count - 1 } ;
}
}
} ثم من مكون البلازور الذي يرث من StatorComponent ، يمكننا إرسال تلك الإجراءات.
@page "/counter"
@inherits StateR . Blazor . StatorComponent
@inject IState < Features . Counter . State > CounterState
< h1 > Counter < / h1 >
< p > Current count : @CounterState . Current . Count < / p >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Increment()))" > + < / button >
< button class = "btn btn-primary" @onclick = "@(async () => await DispatchAsync(new Features.Counter.Decrement()))" > - < / button >ليس من الضروري أن ترث من
StatorComponent، يمكن للمكون (أو أي فئة) الاشتراك يدويًا في أيIState<T>.
لقد لعبت مع عدد قليل من المكتبات الأخرى ولم أكن راضيًا بنسبة 100 ٪ عن كيفية قيامهم بالأشياء. لذا أثناء اللعب مع MobileBlazorBindings والتطبيقات الهجينة الجديدة ، وجدت أن سجلات C# 9 كانت مناسبة جدًا لهذا. بدأت في تجربة تحويل الأنواع غير القابلة للتغيير (السجلات) وانتهى الأمر بإنشاء هذا المشروع.
اسم StateR ، Stator الواضح ، مستوحى من MediatR الذي تم استخدامه في البداية تحت الغطاء للتوسط في الأوامر.
الجزء الثابت هو الجزء الثابت من نظام الدوران [...]. تتدفق الطاقة من خلال الجزء الثابت من أو إلى المكون الدوار للنظام.
المصدر: ويكيبيديا
بعد سماع ذلك لسنوات ، قرأت عن ذلك ووجدت المفهوم الرائع ، وتجربته ، واعتمد الفكرة.
تعتمد هذه المكتبة على المفاهيم التي أدخلتها Redux ، لكن .NET ليس JavaScript و .NET Core مبني على حقن التبعية (DI) ، لذلك قررت الاستفادة من ذلك.
لا يوجد نوع ولا يوجد DI حقيقي في JavaScript ، لذلك من المنطقي أن الأشخاص هناك لم يأخذوا ذلك في الاعتبار عند بناء Redux.
استندت إلى تطبيق Redux DevTools على Fluxor ، وهو مشروع مشابه ، استخدمته مرة واحدة. ساعدني ذلك في خفض وقت التنفيذ لتوصيل الجزء الثابت مع Redux DevTools ؛ شكرًا.
...
يرجى فتح مشكلة وتكون واضحة قدر الإمكان ؛ انظر كيف تساهم؟ لمزيد من المعلومات.
إذا كنت ترغب في المساهمة في المشروع ، أولاً ، شكرًا لك على اهتمامك ، ويرجى قراءة المساهمة في مشاريع Forevolve Open Source لمزيد من المعلومات.
أيضًا ، يرجى قراءة مدونة قواعد سلوك العهد المساهم الذي ينطبق على جميع مستودعات Forevolve.
dotnet test /p:CollectCoverage=true => coverage.json
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura => coverage.cobertura.xml
dotnet test --collect:"XPlat Code Coverage" => testResults/{Guid} /coverage.cobertura.xml
dotnet tool install -g dotnet-reportgenerator-globaltool
reportgenerator -reports:coverage.cobertura.xml -targetdir:coveragereport -reporttypes:Html
dotnet test /p:CollectCoverage=true /p:CoverletOutputFormat=cobertura
reportgenerator " -reports:test**coverage.cobertura.xml " -targetdir:coveragereport -reporttypes:Html