Fluent Validation a adnotacje danych [zamknięte]

123

Jakie są operacyjne różnice między tymi dwoma pakietami walidacji, gdy są używane do walidacji ASP.NET MVC? Wydaje się, że mają podobne obiekty, aż po nazwy obiektów. Czy jeden jest spokrewniony? Jakie są między nimi różnice? W jaki sposób te różnice oznaczają różne przypadki użycia?

SiberianGuy
źródło
52
Warto również zauważyć, że pytania, które są zamknięte, ponieważ nie są konstruktywne, zwykle mają wiele pozytywnych opinii, więc faktycznie SĄ pomocne ludziom. Coś musi być z tym nie tak
Dmitry Efimenko
2
Zgadzam się, że tego typu pytania są przydatne, ale poniższe odpowiedzi wydają mi się bardziej opiniami, a nie faktami.
Ian Warburton
3
Całkowicie się z tym zgadzam, jednak pytanie „jakie są różnice” zamiast „jakie są Twoje preferencje” prawdopodobnie pozwoliłoby uniknąć tej sytuacji.
Jeremy A. West
Myślę, że chodzi o to, że musisz to sformułować, aby odpowiedzi były mniej oparte na opiniach, a nie na faktach. Nie pytaj „Jaki jest Twój ulubiony?” ale "Jakie są różnice operacyjne między?" Wtedy nie otrzymasz odpowiedzi typu „Wolę Fluent Validation”. ale zamiast tego rzeczy, które najpierw przedstawiają różnice, a następnie przedstawiają wyniki.
ruffin

Odpowiedzi:

113

Wolę Fluent Validation :

  1. Daje mi znacznie lepszą kontrolę nad moimi regułami walidacji
  2. Wykonywanie walidacji warunkowej różnych właściwości jest o wiele łatwiejsze w porównaniu z adnotacjami danych
  3. Oddziela walidację od moich modeli widoku
  4. Testowanie jednostkowe jest znacznie łatwiejsze w porównaniu z adnotacjami danych
  5. Ma doskonałą obsługę walidacji po stronie klienta dla większości standardowych reguł walidacji
Darin Dimitrov
źródło
6
Jeszcze kilka punktów z tego artykułu ( webdevbros.net/2010/12/03/… ): 1. Zbyt wiele adnotacji sprawia, że ​​model wygląda brzydko (podobnie jak 3) 2. Lepsza możliwość ponownego użycia 3. Lepsza wydajność (brak Refleksji )
SiberianGuy
2
@Idsa Punkt wykonania wydaje się wątpliwy. Refleksja musi nastąpić tylko raz na model. Zakłada to dobrą implementację, nie wiem, jak działa ta konkretna implementacja.
CodesInChaos
@CodeInChaos, wygląda na to, że masz rację. Ale zatrzymam to tam, ponieważ nie jestem również pewien (i wystarczająco leniwy, aby się dowiedzieć), w jaki sposób jest wdrażany.
SiberianGuy
2
Popieram FluentValidation ... to rządzi. Z perspektywy kodu OCD uwielbiam to, że zdejmuje z widoków odpowiedzialność za walidację i nadaje jej własne zajęcia. Próbowałem xVal przez jakiś czas w MVC1 ... Adnotacje danych były w porządku dla prostych rzeczy, ale kiedy masz więcej niż kilka reguł, ledwo można było określić, co ma reprezentować ViewModel.
Brandon Linton,
@Darin jak przekazujesz komunikaty o błędach w widoku? czy możesz podać przykład, jak to zrobić?
Jaime Sangcap
32

Zdecydowanie wolę adnotacje danych, ponieważ ...

  1. wszystkie reguły walidacji można skonfigurować w jednym miejscu w kodzie (w ramach klasy metadanych modelu) i nie trzeba ich powtarzać nigdzie indziej.
  2. istnieje doskonałe wsparcie dla walidacji po stronie klienta (znowu - bez powtarzania reguł walidacji!) podczas korzystania z atrybutów adnotacji danych .
  3. Atrybuty adnotacji danych można przetestować, aby upewnić się, że istnieją.
  4. istnieją ładne dodatkowe atrybuty walidacji stworzone przez społeczność (np. rozszerzenia adnotacji danych ).
Marius Schulz
źródło
2
Myślę, że większość z tych właściwości można osiągnąć za pomocą płynnej weryfikacji. Nie wiem, czy biblioteka w OP to obsługuje, ale w zasadzie jest to możliwe i też niezbyt trudne.
CodesInChaos
Jaki jest sens testowania obecności atrybutów? Czy to nie jest po prostu powtarzanie reguł walidacji?
Sam
30
@Sam: sprawdzając, czy właściwości są ozdobione atrybutami adnotacji danych, nie testujesz funkcjonalności samego atrybutu; po prostu upewniasz się, że tam jest. Powinienem powiedzieć, że teraz, dwa lata później, jestem po stronie Darina i zgadzam się z jego odpowiedzią.
Marius Schulz
@Sam, bo pewnie chcesz wiedzieć, czy ktoś usunie go z twojego modelu.
Steve
3
Świetny komentarz Marius. Szkoda, że ​​większość samouczków EF teraz pokazuje walidację wykonaną za pomocą adnotacji danych. Początkowo byłem również uzależniony od prostoty adnotacji, ale wkrótce po tym, jak próbowałem zaimplementować niestandardową regułę walidacji, od razu wskoczyłem do zespołu Fluent Validation ... Swoją drogą, szkoda, że ​​Darin przestał publikować :( Większość z jego komentarze w StackOverflow są
trafne