Backend prosesseringen til Milabowl bÊrer mye preg av teknsik gjeld og dÄrlig struktur som fÞlge av mange snarveier nÄr man gikk fra live
applikasjon i Azure til Github Pages. En omfattende omskrivning nÊrmer seg nÄ slutten. Hovedfokuset er Ä senke terskelen for Ä legge til
nye regler. Dette blir gjort ved Ă„ ta i bruk en helt ny rules engine, âMilaEngineâđ§đŒââïž. Det eneste man trenger for Ă„ legge til en ny regel
er Ă„ implementere IMilaRule
interfacet, deretter skjer alt automagisk:
public record MilaRuleResult(string RuleName, string RuleShortName, decimal Points);
public interface IMilaRule
{
MilaRuleResult Calculate(MilaGameWeekState userGameWeek);
}
Alle implementasjoner vil automatisk bli plukket opp av .NET sin DI container, og automatisk kalkulert og lagt inn i game_state.json.
Frontendend vil ogsÄ bli oppdatert til Ä automatisk plukke opp alle nye regler, og rendre nye regler. For Ä forenkle enda mer kan man
implementere den abstrakte klassen MilaRule
. Man mÄ da sette et ShortName (som vil dukke opp i tabellene i front end), og en metode
for Ă„ beregne poeng. Regelen vil dukke opp med samme navn som klassen i JSON resultatet.
public abstract class MilaRule : IMilaRule
{
protected abstract string ShortName { get; }
protected abstract decimal CalculatePoints(MilaGameWeekState userGameWeek);
public MilaRuleResult Calculate(MilaGameWeekState userGameWeek)
{
return new MilaRuleResult(GetType().Name, ShortName, CalculatePoints(userGameWeek));
}
}
For Ä vise hvor enkelt det blir Ä legge til en ny regel kan vi se pÄ implementasjonen av regelen for gult kort:
public class YellowCards : MilaRule
{
protected override string ShortName => "YC";
protected override decimal CalculatePoints(MilaGameWeekState userGameWeek)
{
return userGameWeek.User.Lineup
.Where(pe => pe.YellowCards == 1)
.Sum(pe => pe.Multiplier);
}
}
For Ă„ sikre at nye regler fungerer som tenkt vil byggen feile â om man ikke har lagt til minst en test pr. regel.
I tillegg til Ä gjÞre det enklere Ä legge til nye regler, vil prosesseringene gÄ mye raskere og favhengigheten til SQL databasen i bunn blir fjernet. Planen er Ä ta nÄvÊrende lÞsning for import av data til SQL, lage et eget prosjekt og rename det til Milalytics, sÄ man fortsatt har mulighet Ä analysere FPL / Mila data med SQL (spesielt handy rundt MilaAwards).
NB: Navn pÄ klasser og interfaces er fortsatt i endring