Często widzę w DDD termin Invariants. Here Dino Esposito mówi o tym. Jeśli spojrzę na bibliotekę .NET, widzę klasę ValidationAttribute. Czy zmienne Invariants i są takie same? Na przykład, czy mogę powiedzieć: 50% rabatu jest dostępne tylko, jeśli suma zamówień przekracza 250 USD jest niezmiennikiem?Jaka jest różnica między niezmiennikami a regułami sprawdzania poprawności?
A może są one różne w przypadku, gdy niezmienniki mają chronić obiekt przed utratą ważności, a sprawdzanie poprawności ma na celu sprawdzenie poprawności obiektu, nawet po zmianie jego stanu (może to być stan ważny lub nieprawidłowy)? W powyższym przykładzie, jeśli używam niezmienników, sprawdzam dla niezmiennika przed aktualizacją rabatu, a w przypadku sprawdzania poprawności stosuję 50% rabatu, a następnie sprawdzam jego ważność (obiekt jest już w stanie niepoprawnym).
Istnieje jednak kilka osób, które nie będą uznawać podstawowych zasad sprawdzania poprawności za niezmienniki domeny, ponieważ są to reguły zwykle związane z ograniczeniami technicznymi. Na przykład, maksymalna długość adresu e-mail nie może być uważana za niezmienną przez niektórych praktyków DDD, ponieważ firma nie dba o długość wiadomości e-mail, ale jest praktycznym ograniczeniem technicznym (np. 'varchar (500)' w DB, ponieważ nie można użyć 'varchar (max)' dla każdego pola lub maksymalny rozmiar wiersza każdego DB byłby przepełniony). – plalx
Dlatego można argumentować, że 'email.length <= 500' nie jest niezmiennikiem i może zdecydować o przekazaniu czeku do bazy danych. Jednak większość bloków danych nie wskaże nawet, która kolumna została przepełniona, co może być argumentem za egzekwowaniem reguły w domenie. – plalx
Ponieważ to rozróżnienie jest wyraźne między "niezmiennikami" i "zatwierdzeniem", czy "niezmienniki" można również nazwać "specyfikacjami"? Myślę raczej o testowaniu obiektów domenowych przeciwko "niezmiennikom". –