tag:blogger.com,1999:blog-8583476407209452685.post5637296161050096127..comments2023-03-04T13:31:53.264+01:00Comments on Andrzej Ludwikowski - zbgureshpxre programmer: Hibernate Validator (JSR 303) + mechanizm refleksji = walidacja absolutnaAndrzej Ludwikowskihttp://www.blogger.com/profile/16655895560488629775noreply@blogger.comBlogger5125tag:blogger.com,1999:blog-8583476407209452685.post-165704407063386922012-02-14T14:53:36.129+01:002012-02-14T14:53:36.129+01:00Zgadzam się, że najlepszym rozwiązaniem jest lepsz...Zgadzam się, że najlepszym rozwiązaniem jest lepsza enkapsulacja. Post był pisany raczej jako ciekawostka, niż jakiś wzorzec. Ostatnio po prostu kombinuję do czego by tu jeszcze wykorzystać refleksje.Andrzej Ludwikowskihttps://www.blogger.com/profile/16655895560488629775noreply@blogger.comtag:blogger.com,1999:blog-8583476407209452685.post-52518686593042946072012-02-14T11:24:39.043+01:002012-02-14T11:24:39.043+01:00Refleksją pakujesz się na bardzo nieprzyjemną minę...Refleksją pakujesz się na bardzo nieprzyjemną minę zwaną wydajnością. Przy niewielkiej "gęstości" wywołania walidatora wykorzystującego mechanizmy refleksji jest to niezauważalne, ale przy dużej ilości tego typu wywołań to boli. Tym bardziej, że problem pojawia się zazwyczaj w produkcji, bo w testach zazwyczaj nie sprawdzamy wydajności.<br /><br />Rozwiązań jest kilka. Po pierwsze wspomniany przez Marcina Joda Time. Po drugie daty można opakować w ich własną klasę zawierającą tylko dwa pola. Po trzecie można napisać specjalizowane walidatory, które będą przyjmowały konkretne typy zamiast ogólnego Object. <br /><br />Generalnie JSR303 jest bardzo przyjemny, ale niestety przy bardziej skomplikowanych zadaniach wysiada.Koziołekhttps://www.blogger.com/profile/17083309584011564718noreply@blogger.comtag:blogger.com,1999:blog-8583476407209452685.post-30226238700571954522012-02-03T18:26:08.717+01:002012-02-03T18:26:08.717+01:00Enkapsulacja do osobnego obiektu jest IMHO prefero...Enkapsulacja do osobnego obiektu jest IMHO preferowanym rozwiązaniem. Bez tego tworzysz obiekt który jest w stanie poprawnym, niepoprawnym albo diabli wiedząc jakim (albo jak kot Schrödingera poprawny i niepoprawny jednocześnie). Na ogół wychodzi się lepiej nie pozwalając na wprowadzenie obiektu w stan niepoprawny.<br /><br />A najlepiej zamiast badziewnych dat z java.util użyć Joda-Time a tam mamy dostępny out-of-the-box typ Interval i problem z głowy. Wsadzanie JSR 303 i tony refleksji do modelu domeny to dodawanie niepotrzebnej złożoności.<br /><br />Z drugiej strony - z powodzeniem używałem JSR-303 do prostych walidacji DTOsów przylatujących przylatujących z GUI.marcinhttps://www.blogger.com/profile/15853778723838360578noreply@blogger.comtag:blogger.com,1999:blog-8583476407209452685.post-21091438224153873012012-02-03T15:16:12.353+01:002012-02-03T15:16:12.353+01:00Racja, o ile coś projektujemy od zera:) Czasami re...Racja, o ile coś projektujemy od zera:) Czasami refaktor jest nieopłacalny.Andrzej Ludwikowskihttps://www.blogger.com/profile/16655895560488629775noreply@blogger.comtag:blogger.com,1999:blog-8583476407209452685.post-28250796172647700902012-02-03T12:57:55.469+01:002012-02-03T12:57:55.469+01:00albo mozesz enkapsulowac from i to do osobnego obi...albo mozesz enkapsulowac from i to do osobnego obiektu DateRange i go osobno zwalidowac walidatorem dla tej klasy.<br /><br />Choc pewnie znajda sie tez inne przyklady z ktorymi tak prosto nie pojdzie.<br /><br />Dla jasnosci dodam rowniez ze z 303 nie korzystalem jeszcze.<br /><br />Pozdrawiam<br />MichalMichał Grucahttps://www.blogger.com/profile/00672953404604806278noreply@blogger.com