2013-04-25 12 views
5

Podczas korzystania z fabrycznego wzorca, czy fabryka musi zawierać logikę walidacji, czy powinna być pozostawiona klasom wywołującym w celu sprawdzenia poprawności przed przekazaniem danych kontekstowych?Czy wzór fabryczny zawiera logikę walidacji

Mam prostą metodę fabryczną, ale opiera się na przekazywanym do niej drzewie konfiguracji, aby zdecydować, jaki obiekt utworzyć.

Może być sytuacja, w której konfiguracja xml może być dobrze uformowana, ale nie w prawidłowym formacie oczekiwanym przez fabrykę i nie wiem, gdzie to powinno zostać sprawdzone.

+2

Twoja fabryka powinna wyrzucić wyjątek, jeśli przekazywana konfiguracja jest niepoprawna. – Lucas

+0

Spójrz na to pytanie: http://stackoverflow.com/questions/11820127/how-to-handle-a-lot-valid-Checks-Checks-będą- -popraszanie--objekt i cokolwiek zdecydujesz, umieść cały kod weryfikacyjny w jednym miejscu. –

Odpowiedz

1

Dlaczego nie oferować obu? W ten sposób przekazujesz odpowiedzialność dzwoniącemu, czy chce, aby jego dane wejściowe zostały zatwierdzone czy nie.

Weźmy ten przykład z Apache Commons - InstantiateFactory:

domyślnej konstruktorzy nie oferują Walidacja:

InstantiateFactory (java.lang.Class classToInstantiate)

konstruktor wykonuje nr sprawdzanie poprawności.

ale oferuje walidacji w getInstance:

statycznego Fabrykę getInstance (java.lang.Class classToInstantiate, java.lang.Class [] paramTypes, java.lang.Object [] args)

Metoda fabryczna, którą wykonuje sprawdzanie poprawności.

0

Przy użyciu wzoru fabrycznego, należy fabryka itsel zawierać logikę sprawdzania czy powinno być pozostawione do klas taryfowych dbać o walidacji przed przekazaniem danych kontekstu?

Istnieją dwie różne alternatywy dla zorganizowania walidacji

  1. zatwierdzania, oddzielnym procesie

Istnieje oddzielna sposób walidacji Validate(Config). Ta metoda jest wywoływana przed metodą budowy i zwraca informację, czy Config jest ważne, czy też nie. Jeśli metoda Validate zwróci wartość Config, zostanie wywołana metoda budowy. Każdy błąd podczas procesu budowy jest uważany za wyjątek.

  1. Walidacja jako część procesu budowy

Nie ma oddzielny sposób walidacji. Zamiast tego walidacja odbywa się wewnątrz metody budowy, gdy jest taka potrzeba.Metoda budowy może zakończyć się niepowodzeniem i zwrócić konstruowany obiekt lub wynik wskazujący na błąd.

Drugi wariant można ładnie zaimplementować za pomocą monad z niemal zerowym kodem i obciążeniem wydajności.

1

Co masz na myśli przez walidację? A co powoduje, że kod będący częścią instancji wzoru Factory jest inny niż jakikolwiek inny kod?

Jeśli przez walidacji masz na myśli sprawdzenie wartości wejściowych odczytanych z użytkownikiem lub pliku wejściowego, odpowiedź jest nie: kod do parsowania wejście jest odpowiedzialny za zatwierdzanie, nie fabryka, która następnie używa wartości odczytu.

Jeśli przez walidację rozumie się posiadanie fabrycznych metod Fabryki sprawdzających, czy ich rozmówcy dostarczyli wartości zgodne z warunkami wstępnymi tych metod, odpowiedź jest taka sama, jak w przypadku każdej innej metody, która nakłada warunki wstępne na jej argumenty: styl konsensusu dla języka Java jest przeznaczony do sprawdzania warunków wstępnych i do rzutowania odpowiednich wyrażeń RuntimeException, jeśli warunki wstępne nie są spełnione.