DDD walidacja encji

0

Takie przemyślenia mam czy w encji powinniśmy zawsze sprawdzać czy dana propercja jest np nullem ?

np.

public sealed class Customer : Entity
{
    public Email ContactEmail { get; private set; }


    public void ChangeEmail(Email email)
    {
 
    if(email is null)
    throw new ArgumentNullException(nameof(email));
    

    ContactEmail = email;
    }
}

albo może powinno się zwracać Resulta

public sealed class Customer : Entity
{
    public Email ContactEmail { get; private set; }


    public Result ChangeEmail(Email email)
    {
 
    if(email is null)
 return   Result.Fail("email can't be null")
    

    ContactEmail = email;
    return Result.Ok();
    }
}

Jak się do tego powinno zabrać, a może takie sprawdzenie dla każdej propercji nie jest potrzebne ?

2

Jeżeli tak jak w tytule ma być zgodnie z DDD to mniej więcej wygląda to tak:

  • walidacje są potrzebne; w zależności od domeny często takie reguły walidacyjne to duża część tego co nazywamy logiką domenową
  • nie musisz walidować wszystkiego; logika domenowa (pod postacią ekspertów domenowych) mówi nam co jest poprawną wartością, a co nie. Czasami null to poprawna wartość
  • co do szczegółów to zazwyczaj warstwa domenowa rzuca wyjątki a warstwa (lub dwie) wyżej je łapie i robi co trzeba, czyli np. prezentuje błędy na UI
0
Kubuś Puchatek napisał(a):

Takie przemyślenia mam czy w encji powinniśmy zawsze sprawdzać czy dana propercja jest np nullem ?

np.

public sealed class Customer : Entity
{
    public Email ContactEmail { get; private set; }


    public void ChangeEmail(Email email)
    {
 
    if(email is null)
    throw new ArgumentNullException(nameof(email));
    

    ContactEmail = email;
    }
}

albo może powinno się zwracać Resulta

public sealed class Customer : Entity
{
    public Email ContactEmail { get; private set; }


    public Result ChangeEmail(Email email)
    {
 
    if(email is null)
 return   Result.Fail("email can't be null")
    

    ContactEmail = email;
    return Result.Ok();
    }
}

Jak się do tego powinno zabrać, a może takie sprawdzenie dla każdej propercji nie jest potrzebne ?

Fyi walidacja adresu e-mail to nie logika dziedzinowa. To powinno być zrobione w warstwie prezentacji. W backendzie to najlepiej wcale. Dużo lepszym sposobem walidacji adresu email jest wysłanie linka do kliknięcia w celu potwierdzenia.

Tak samo walidacja każdej property to nie logika dziedzinowa. Obczaj sobie biblioteke fluent validator i waliduj obiekty DTO które potem (jak walidacja przejdzie) mapujesz/tworzysz na ich podstawie obiekty dziedziny.

1 użytkowników online, w tym zalogowanych: 0, gości: 1