|
|
Zveřejněno 30.08.2018 13:29:41
|
|
|

Dnes jsem s kolegy diskutoval, zda použít kombinaci @Configuration a @Bean k tvorbě zrn ve Spring Boot, nebo použít @Service a další poznámky přímo na kurz. Autor má tendenci používat první variantu, tedy kombinaci @Configuration a @Bean.
Podívejme se nejprve na příklad, cílem je vytvořit fazolu pro SearchService.
Používejte @Service přímo:
Spusťte aplikaci, přístup do prohlížeče: http://localhost:8081/search?q=koly, zobrazení stránky: ["hello", "koly"]
Způsoby, jak používat @Configuration a @Bean:
Ve srovnání s přímým použitím @Service kódu existuje třída AppConfig, která odstraní @Service anotací umístěných nad ElasticSearchServiceImpl. Na první pohled je tam víc kódu a tříd. Jaké jsou tedy výhody používání toho druhého?
Autor věří, že přínosy jsou:
Oddělení zájmů
Použitím metod @Configuration a @Bean je tvorba zrn vše na jednom místě a rozhraní a jeho implementace nemají s vytvořením zrna nic společného.
Pokud je potřeba změnit vytvoření zrna, stačí zobrazit a upravit odpovídající třídu Configuration a nemusíte jít do příslušného Java zrna, abyste provedli změny. Například někdy je potřeba vytvářet fazole spolupracovat s @Scope nebo @Profile a stačí upravit pouze třídu Configuration.
Samostatná služba
@service samotná anotace přebírá dvě povinnosti:
Jedním z nich je tvorba fazolí; Druhým je identifikovat třídu jako službu. Označuje, že anotovaná třída je "služba", původně definovaná doménově řízenou
Návrh (Evans, 2003) jako "operace nabízená jako rozhraní, které stojí samostatně v modelu, bez zapouzdřeného stavu."
Výše je Springovo vysvětlení @Service anotací. Tento is@Service ve skutečnosti představuje bezstavovnou, nezávislou operaci rozhraní v DDD.
Prostřednictvím spolupráce @Bean a @Configuration je tvorba zrn předána samostatné třídě a identita služby je předána rozhraní a názvu třídy v Javě. To se odráží i ve Spring Data, například v Repository, který je identifikován jménem, například CrudRepository. Proto se služba odráží i v názvu. Specifické definice hierarchie lze použít k poskytnutí více vrstev podle projektu podle názvu bez závislosti na anotacích poskytovaných Springem, jako jsou vrstva Mapper, vrstva Validator atd.
Navíc fazole a servis jsou dvourozměrné pojmy. Jedna o konkrétní implementaci a druhá o konceptech v DDD.
Flexibilnější
Pomocí @Bean metod můžete vytvářet instance tříd v knihovně. Pokud použijete metodu @Service, nebudete moci přidávat @Service komentáře do příslušných tříd v knihovně.
Nejméně znalostí
Princip minimálních znalostí znamená:
Čím méně technologie nebo znalostí je potřeba k dokončení funkce, tím lépe, aby byla zajištěna jednoduchost projektu a snížila se obtížnost učení projektu.
Protože není možné vytvářet instance tříd v knihovně tříd pomocí @Service, musíte při podobných potřebách použít formu @Configuration a @Bean. V tomto bodě jsou v celém projektu anotace jako @Service, @Configuration a @Bean, a tyto anotace dělají totéž, tedy vytvářejí zrno.
U @Service je vysoká pravděpodobnost @Service, @Component, @Configuration a @Bean současně.
Používání @Configuration a @Bean může zcela eliminovat použití @Service a @Component, což je v souladu s principem minimálních znalostí.
A nakonec, Spring Beans byly vytvořeny v xml a později použity v Javě pro konfiguraci. Hlavním důvodem, proč XML nepoužíváme, je, že není dostatečně stručný a nemá funkce jako kontrola při kompilaci, místo potřeby rozdělit tvorbu zrn mezi třídy.
Shrnuto, autor dává přednost @Configuration a @Bean metodám. |
Předchozí:Jednoduchý způsob, jak vymazat obrazovku z příkazového řádku PythonuDalší:Několik způsobů využití distribuovaných zámků (redis, zookeeper, databáze)
|