|
|
Yayınlandı 30.08.2018 13:29:41
|
|
|

Bugün meslektaşlarımla Spring Boot'ta fasulye oluşturmak için @Configuration ve @Bean kombinasyonunu mı kullanmalıyım yoksa @Service ve diğer açıklamaları doğrudan sınıfta mı kullanmalı olacağımızı konuştum. Yazar genellikle ilkini, yani @Configuration ve @Bean kombinasyonunu kullanır.
Önce bir örneme bakalım, amaç SearchService için bir çekirdek yaratmaktır.
Doğrudan @Service kullanın:
Uygulamayı başlat, tarayıcı erişimi: http://localhost:8081/search?q=koly, sayfa gösterimi: ["merhaba", "koly"]
@Configuration ve @Bean kullanma yolları:
@Service kodu doğrudan kullanmaya kıyasla, ElasticSearchServiceImpl'in üstüne yerleştirilen @Service açıklamaları kaldıran bir AppConfig sınıfı vardır. İlk bakışta daha fazla kod ve ders var. Peki ikincisini kullanmanın faydaları nelerdir?
Yazar, faydaların şunlar olduğuna inanıyor:
Şirketlerin ayrılması
@Configuration ve @Bean yöntemleri kullanılarak, fasulye üretimi tek bir yerde yapılır ve arayüz ile uygulaması fasulye üretimiyle hiçbir ilgisi yoktur.
Eğer çekirdek oluşturma işlemi değiştirilmesi gerekiyorsa, sadece ilgili Yapılandırma sınıfını görmeniz ve değiştirmeniz yeterlidir ve değişiklik yapmak için ilgili Java bean'e gitmenize gerek yoktur. Örneğin, bazen çekirdek oluşturma @Scope veya @Profile ile işbirliği yapmak zorunda kalır ve sadece Yapılandırma sınıfını değiştirmek gerekir.
Tek görev
@service açıklamasının kendisi iki sorumluluğu üstlenir:
Biri fasulye üretimi; İkincisi ise bir sınıfı hizmet olarak tanımlamaktır. Açıklamalı bir sınıfın "Hizmet" olduğunu, başlangıçta Alan Odaklı tarafından tanımlandığını gösterir
Design (Evans, 2003) "modelde tek başına duran bir arayüz olarak sunulan bir işlem" olarak tasarlanmıştır, kapsüllenmiş bir durum yoktur.
Yukarıda Spring'in @Service açıklamaları yer almaktadır. Bu is@Service aslında DDD'de durumsuz, bağımsız bir arayüz işlemini temsil eder.
@Bean ve @Configuration iş birliği kapsamında, fasulye üretimi ayrı bir sınıfa devredilir ve Hizmet kimliği Java'daki arayüz ve sınıf adına verilir. Bu, Spring Data'da da yansımaktadır; örneğin CrudRepository gibi isimle tanımlanır. Bu nedenle, hizmet adı da bu isimle yansımaktadır. Özel hiyerarşi tanımları, Spring tarafından sağlanan Mapper katmanı, Validator katmanı gibi annotasyonlara (örneğin Mapper katmanı, Validator katmanı vb.) bağımlı olmadan projeye isimle göre daha fazla katman sağlamak için kullanılabilir.
Ayrıca, fasulye ve servis iki boyutlu kavramlardır. Biri somut uygulama, diğeri ise DDD'deki kavramlar hakkında.
Daha esnek
@Bean yöntemleri kullanarak kütüphanede sınıf örnekleri oluşturabilirsiniz. @Service yöntemini kullanırsanız, kütüphanedeki ilgili sınıflara @Service yorum ekleyemezsiniz.
En Az bilgi
Minimum bilgi ilkesi şu anlam taşır:
Fonksiyonu tamamlamak için gereken teknoloji veya bilgi ne kadar az olursa, o kadar iyi olur; böylece projenin sadeliği sağlanır ve öğrenmenin zorluğunu azaltır.
@Service kullanarak sınıf kütüphanesinde sınıf örnekleri oluşturmak mümkün olmadığından, benzer ihtiyaçlarla karşılaşıldığında @Configuration ve @Bean biçimlerini kullanmanız gerekir. Bu noktada, tüm projede @Service, @Configuration ve @Bean gibi açıklamalar var ve bu açıklamalar aynı şeyi yapar, yani fasulyeyi oluşturur.
@Service ile aynı anda @Service, @Component, @Configuration ve @Bean olasılığı yüksektir.
@Configuration ve @Bean kullanımı ise @Service ve @Component kullanımını tamamen ortadan kaldırabilir; bu da minimum bilgi ilkesine uygundur.
Son olarak, Spring beans xml'de oluşturuldu ve daha sonra yapılandırma için Java kullanıldı. XML kullanmamanın ana nedeni, yeterince kısa olmaması ve derleme zamanı kontrolü gibi özelliklerin olmaması, çekirdek üretimini sınıflar arasında dağıtma ihtiyacının olmamasıdır.
Özetle, yazar @Configuration ve @Bean yöntemlerini tercih eder. |
Önceki:Python komut satırından ekranı temizlemenin basit bir yoluÖnümüzdeki:Dağıtılmış kilitleri kullanmanın birkaç yolu (redis, hayvanat bahçesi görevlisi, veritabanı)
|