Ahojte,
zaujima ma, ako by ste pristupovali k takemuto scenaru:
navrhujem teraz architekturu pre novy projekt, internu LOB aplikaciu s komplexnou business logikou a par pouzivatelmi a chcel by som sa poradit ako oddelit UI od business logiky. Aplikacia je Rich client (Blazor Server).
Business logiku si mozete predstavit ako analogiu k tomuto:
-
Uzivatel vytvara objednavku, tak ze vyberie produkt z katalogu → zbehne komplexna business logika, ktora vypocita supisku potrebneho materialu, cenu, cas vyroby atd.
-
Uzivatel rucne zmeni niektore parametre → zbehne komplexna business logika, ktora prepocita…
Tuto logiku som implementoval a otestoval v Domain vrstve, kde som nasledoval DDD principy.
napriklad.
public class ProductOrder
{
public IReadOnlyCollection<ProductOrderMaterial> MaterialItems { get; }
public void SetSomeParameter(double value)
{
SomeParameter = value;
RecalculateMaterials();
RecalculateTime();
RecalculatePrice();
}
}
UX by mal byt asi takyto:
- Uzivatel vytvara objednavku, tak ze vyberie produkt z katalogu => vidi prepocitane data
- Uzivatel rucne zmeni niektore parametre => vidi prepocitane data
- Uzivatel klikne na save - az vtedy sa uklada do databazy
Otazka znie, ako dostat tuto business logiku z domenovej vrstvy na UI?
Typicky sa vytvori nejaky viewmodel namapovanim z prislusnej domenovej entity a pri ukladani sa namapuje viewmodel na domenova entitu.
Toto ale vobec neriesi tu komplexnu business logiku, ktora ma zbehnut medzitym a prejavit sa na UI.
Ako by ste teda riesili tie “Long living” viewmodely, ich mapovanie na business entity a ich prepocitavanie?