Jestem pewien, że nie jestem jedynym, który stoi w obliczu tego problemu, ale nie jestem w stanie znaleźć rozwiązania do tej pory. Problem jest jak poniżej.Który wzór do użycia do sprawdzania poprawności
Opublikowałem serwis internetowy (na którym nie mam żadnej kontroli i nie mogę go zmienić) z dotychczasowego systemu i wszyscy klienci go używają. Otrzymuję żądania od usługi sieciowej, a otrzymany obiekt jest bardzo złożony, ale dla przykładu powiedzmy, że otrzymuję obiekt A z wywołania usługi sieciowej, który zawiera kilka innych obiektów, takich jak Obiekt B, Obiekt C w nim itp. ponadto obiekty B & C mają również pewne pierwotne typy danych, jak również niektóre inne obiekty w nich. Mój problem polega na tym, że chcę zweryfikować cały obiekt A (wszystkie obiekty i obiekty podrzędne), który wzór wzorowy jest tutaj zalecany? Po drugie, głównym punktem jest to, że mogę uzyskać różne typy obiektu A z usługi internetowej. To, co naprawdę rozumiem przez różne typy obiektów A, polega na tym, że Obiekt A zależy od klienta, tzn. Niektórzy klienci wyślą Obiekt A bez wypełnienia danych w zawierającym Obiekt B lub nawet mogą częściowo wypełnić Obiekt B, a następnie wysłać go do Obiektu A Tak więc muszę zweryfikować obiekt A w oparciu o klienta (ponieważ niektórzy klienci będą wymagać zawarcia obiektu B, niektórzy nie będą, niektórzy będą wymagać kilku elementów w obiekcie B itd.). Innymi słowy, będę miał miejsce, w którym będę przechowywać reguły sprawdzania poprawności dla każdego klienta, który powie mi coś takiego, że klient ABC chce, aby pole abc w obiekcie B było ciągiem typu, a maksymalna długość to 25 znaków i jest obowiązkowe mieć dane w tym polu.
Niektóre validations które chciałbym wykonać to
Sprawdzanie pól jakiegoś przedmiotu (słownie Obiekt b) dla typów danych, długość danej dziedzinie, jest pole wymagane dla tego klienta, czy jest to opcjonalne etc etc ...
Każdy konkretny przykład pracy będzie niezwykle przydatny.
Struktura obiektu A dla tego konkretnego przykładu wygląda następująco.
public class A
{
private B objectB;
private C objectC;
// and so on
}
public class B{
private E objectE;
private String name;
private int age;
// and so on
}
public class C
{
private F objectF;
private String address;
private String country;
}
public class E
{
// Members here
}
public class F
{
// Members here
}
P.S: Podałem arbitralne nazwy klasom i członkom tylko dla ogólnego zrozumienia. O tak, zapomniałem wspomnieć, że używam tutaj języka Java, ale nie ma to znaczenia, ponieważ zasady lub wzorce projektowe można zastosować do dowolnego języka. Mam nadzieję, że wkrótce się odezwę. :)
Walidację można przeprowadzić na wiele sposobów i opiera się ona w dużej mierze na opiniach. Spójrz na [Wzór strategii] (http://en.wikipedia.org/wiki/Strategy_pattern). – Bart
Czy możesz polecić jakąkolwiek alternatywę inną niż wzorzec strategii? –
Proponuję użyć kombinacji Visitor i Factory/AbstractFactory. Fabryka może tworzyć dowolne klasy walidatorów według typu klienta ze specjalnymi regułami. Odwiedzający samochód sprawdza poprawność całej struktury, używając klasy sprawdzania poprawności –