2013-05-06 14 views
5

Piszę webservice.W której warstwie należy wykonać sprawdzanie poprawności?

Zazwyczaj dane wejściowe będą dokumentem XML i wyjściowym plikiem XML lub JSON.

Aplikacja wykorzystuje tupot MVC, posiadające różne warstwy

  • regulatorów: Otrzymuj XML i dostarczyć odpowiedzi (XML/JSON)
  • Usługa: logiki biznesowej, transakcje
  • DAO: Zapytanie źródło danych (Baza danych lub może inna usługa sieciowa)

Moje zrozumienie polega na tym, że podstawowa walidacja (tj. XML przeciwko XSD) powinna zostać wykonana jak najszybciej na warstwie sterownika.

Potem jeszcze trzeba wykonać dodatkową walidację, niektóre z tych walidacji są podstawowe, na przykład

  • Format daty musi być prawidłowa
  • Nazwa użytkownika nie może przekraczać znaków X (może być również wykonywane na XSD?)

O ile rozumiem, takie podstawowe sprawdzenia poprawności powinny zostać wykonane przy usuwaniu XML z obiektu Java. Że też się stało w warstwie kontrolera (chociaż sama walidacja byłyby wykonywane przez obiekt Java gdzie XML unmarshalled do)

I wreszcie czoła więcej „kompleks” walidacji przykłady

  • data nie powinien nastąpić przed 1950 (tylko przypadkowy przykład)
  • Jeżeli wartość A jest większa niż B, a wartość C nie powinna przekraczać ď

Takie „kompleks” valiations wydaje się, że za fect kandydata do interfejsu javax.validation.Validator. Czuję też, że powinny być wykonane w warstwie kontrolera.

Pytania są

  1. Czy to podejście prawidłowe? Czy powinienem również zatwierdzić coś na innych warstwach?
  2. Czy dodaję zbyt wiele logiki do kontrolerów? Czy powinienem przenieść jakieś sprawdzanie poprawności do warstwy usługi, gdzie jest logika biznesowa?
+1

Dla mnie wasza tak zwana "kompleksowa" walidacja brzmi bardziej jak konieczność biznesowa i jako taka powinna być umieszczana na warstwie logiki biznesowej. – mawia

+0

@mawia Dobry punkt, i dzięki Bogu zacytowałem słowo "kompleks" :) –

Odpowiedz

2

Czy to podejście jest prawidłowe? Czy powinienem również zatwierdzić coś na innych warstwach?

Tak, częściowo. Wydaje się poprawne sprawdzanie danych wejściowych pod kątem poprawności, takich jak format daty, długość itp. Nie ma potrzeby wciskania ich do wewnętrznych warstw. Muszą być zatwierdzone z góry.

Możliwe są niektóre sprawdzenia poprawności zgodnie z regułami biznesowymi, które należy wykonać w warstwie usługi, np. Jeśli nazwa użytkownika/adres e-mail została już zarejestrowana podczas dodawania użytkownika do systemu, co zostanie wykonane w warstwie usługi.

Czy dodaję zbyt wiele logiki do kontrolerów? Czy powinienem przenieść jakieś sprawdzanie poprawności do warstwy usługi, gdzie jest logika biznesowa?

Nie jest uważana za logikę z mojej perspektywy. Sprawdzanie poprawności danych w kontrolerze różni się od dodawania do niego logiki biznesowej. Nie zmieniasz/nie gromadzisz danych, ale sprawdzasz poprawność danych.

Jak wspomniano powyżej, niektóre walidacje następujące po regułach biznesowych muszą zostać zaimplementowane w warstwie usług.

Edit: Jak dodałem tag web-service, wyobrazić sobie, że dzwonisz usługę internetową & następnie po stronie serwera, to dowiedział się, że dane ma niewłaściwy format. Mogło to zaoszczędzić podróż w obie strony, czas serwera, zasoby sieciowe itp., Gdyby zostało wcześniej zatwierdzone.

+0

Muszę potwierdzić, że nazwa użytkownika nie powinna przekraczać 15 znaków i powinna być unikalna. Ograniczenie 15 znaków miałoby miejsce w kontrolerze, a sprawdzenie unikalności nastąpiłoby w warstwie usługi/biznesu? – Aquillo

+1

@Aquillo Tak, możliwe jest ograniczenie żądania w kontrolerze w celu sprawdzenia poprawności długości itp., A nie kontynuowania aż do warstwy usługi, aby go zidentyfikować. Dlatego dane muszą przejść przez początkową fazę wstępnej walidacji, aby przejść do następnej, która jest bardziej czysta i korzystniejsza. –

+0

Ok dzięki za weryfikację mojego podejścia :) – Aquillo

Powiązane problemy