|
|
Zverejnené 30. 8. 2018 13:29:41
|
|
|

Dnes som diskutoval s kolegami, či použiť kombináciu @Configuration a @Bean na tvorbu fazúľ v Spring Boot, alebo použiť @Service a ďalšie poznámky priamo na kurz. Autor má tendenciu používať tú prvú, teda kombináciu @Configuration a @Bean.
Pozrime sa najprv na príklad, cieľom je vytvoriť fazuľu pre SearchService.
Použite @Service priamo:
Spusti aplikáciu, prístup do prehliadača: http://localhost:8081/search?q=koly, zobrazenie stránky: ["hello", "koly"]
Spôsoby, ako používať @Configuration a @Bean:
V porovnaní s priamym používaním @Service kódu existuje trieda AppConfig, ktorá odstraňuje @Service anotácií umiestnených nad ElasticSearchServiceImpl. Na prvý pohľad je tam viac kódu a tried. Aké sú teda výhody používania toho druhého?
Autor verí, že výhody sú:
Oddelenie záujmov
Použitím metód @Configuration a @Bean je tvorba fazúľ všetko na jednom mieste a rozhranie a jeho implementácia nemajú nič spoločné s tvorbou zrna.
Ak je potrebné zmeniť vytvorenie zrna, stačí zobraziť a upraviť príslušnú triedu Configuration a nemusíte ísť do príslušného Java beanu na vykonanie zmien. Napríklad niekedy je potrebné vytvoriť fazuľu spolupracovať s @Scope alebo @Profile a stačí upraviť len triedu Configuration.
Samostatná služba
@service samotná anotácia preberá dve povinnosti:
Jednou je tvorba fazule; Druhým je identifikovať triedu ako službu. Označuje, že anotovaná trieda je "služba", pôvodne definovaná doménou riadenou doménou
Dizajn (Evans, 2003) ako "operácia ponúkaná ako rozhranie, ktoré stojí samostatne v modeli, bez zapuzdreného stavu."
Vyššie je Springovo vysvetlenie @Service anotácií. Tento is@Service v skutočnosti predstavuje bezstavovú, nezávislú rozhraniovú operáciu v DDD.
Pri spolupráci @Bean a @Configuration sa vytváranie fazúľ odovzdáva samostatnej triede a identita služby sa odovzdáva rozhraniu a názvu triedy v Jave. To sa odráža aj v Spring Data, ako je Repository, ktorý je identifikovaný menom, napríklad CrudRepository. Preto sa služba odráža aj v názve. Špecifické hierarchické definície môžu byť použité na poskytnutie viacerých vrstiev podľa projektu podľa názvu bez závislosti od anotácií poskytovaných Springom, ako sú vrstva Mapper, vrstva Validator a podobne.
Okrem toho sú fazuľa a služba dvojrozmerné pojmy. Jedna o konkrétnej implementácii a druhá o konceptoch v DDD.
Flexibilnejšie
Použitím @Bean metód môžete vytvárať inštancie tried v knižnici. Ak použijete metódu @Service, nebudete môcť pridávať @Service komentárov do príslušných tried v knižnici.
Najmenšie poznanie
Princíp minimálneho poznania znamená:
Čím menej technológií alebo vedomostí je potrebných na dokončenie funkcie, tým lepšie, aby sa zabezpečila jednoduchosť projektu a znížila náročnosť učenia sa projektu.
Keďže nie je možné vytvárať inštancie tried v knižnici tried pomocou @Service, musíte pri podobných potrebách použiť formu @Configuration a @Bean. V tomto bode sú v celom projekte anotácie ako @Service, @Configuration a @Bean a tieto anotácie robia to isté, teda vytvárajú zrno.
Pri @Service je vysoká pravdepodobnosť @Service, @Component, @Configuration a @Bean naraz.
Používanie @Configuration a @Bean môže úplne eliminovať používanie @Service a @Component, čo je v súlade s princípom minimálneho poznania.
Nakoniec, mimochodom, Spring Beans boli vytvorené v xml a neskôr používali Java na konfiguráciu. Hlavným dôvodom nepoužitia XML je, že nie je dostatočne stručný a nemá funkcie ako kontrola pri kompilácii, namiesto potreby rozložiť tvorbu zŕn medzi triedy.
Na záver, autor uprednostňuje používať @Configuration a @Bean metódy. |
Predchádzajúci:Jednoduchý spôsob, ako vymazať obrazovku z príkazového riadku PythonuBudúci:Niekoľko spôsobov použitia distribuovaných zámkov (redis, zookeeper, databáza)
|