Kod okunabilirliği veya basitliği için hangisi önemlidir? Aksi takdirde değiştirme yöntemine bakın

talep

İşte herkesin anlaması için sanal bir iş gereksinimi. Diyelim ki bir sipariş sistemi var ve içerideki bir işlev, farklı sipariş türlerine göre farklı işlemler yapmak.

Sipariş varlığı:

servis arayüzü:

Geleneksel gerçekleştirme

Sipariş türüne göre başka bir şey yazın:

Strateji modu uygulaması

Strateji modelini kullanarak, iş mantığını uygulamak için yalnızca iki satıra ihtiyaç vardır:

HandlerContext'in, farklı iş işlemcilerini depolamak için kullanılan bir işlemci bağlamı olan yukarıdaki yönteme enjekte edildiğini görebilirsiniz ve aşağıda ayrıntılı olarak açıklanacaktır. AbstractHandler'dan soyut bir işleyici alıyoruz, iş mantığını uygulamak için yöntemini çağırıyoruz.

Artık ana iş mantığımızın işlemcide uygulandığını anlayabiliyoruz, bu nedenle işlemci sayısı kadar sipariş türü var. Gelecekte, talep değişir ve sipariş türü eklenir.Sadece ilgili işlemciyi eklemeniz gerekir.Yukarıdaki OrderServiceV2Impl'nin hiç değiştirilmesine gerek yoktur.

İş işlemcisinin ifadelerine bir göz atalım:

İlk olarak, her bir işlemci yay kabına eklenmelidir, bu nedenle @Component ile açıklama eklenmesi gerekir ve ikinci olarak, işlemcinin hangi sipariş türüne karşılık geldiğini belirlemek için özel bir @ HandlerType eklenmesi gerekir ve son olarak AbstractHandler'ı devralır ve kendini uygular. İş mantığı.

Özel ek açıklama @HandlerType:

Soyut işleyici AbstractHandler:

Özel açıklamalar ve soyut işlemciler çok basittir, bu nedenle işlemciyi yaylı konteynere nasıl kaydedebilirsiniz?

Spesifik fikirler şunlardır:

1. Belirtilen pakette @HandlerType ile işaretlenmiş sınıfı tarayın;

2. Ek açıklamadaki tür değerini anahtar olarak ve karşılık gelen sınıfı değer olarak kullanın ve Harita'da kaydedin;

3. HandlerContext'i başlatmak ve yay konteynerine kaydetmek için yukarıdaki haritayı yapıcı parametresi olarak kullanın;

Yukarıdaki işlevleri tamamlamak için HandlerProcessor sınıfındaki temel işlevleri özetliyoruz.

İşleyici İşlemci:

ClassScanner: Tarama aracı sınıfı kaynak kodu

HandlerProcessor'ın BeanFactoryPostProcessor uygulaması gerekiyor. Çekirdeği yay işlemeden önce, özel çekirdeği kaba kaydedin.

Temel çalışma tamamlandı, şimdi HandlerContext'in ilgili işlemciyi nasıl elde ettiğine bir göz atın:

HandlerContext:

BeanTool: Bean tool sınıfını edinin

#GetInstance yöntemi, türe göre ilgili sınıfı elde eder ve ardından sınıf türüne göre ilkbaharda kayıtlı fasulyeyi alır.

Son olarak, proje başladığında bir rol oynayabilmek için HandlerProcessor ve BeanTool'un @Bean aracılığıyla taranması veya açıkça kaydedilmesi gerektiğini lütfen unutmayın.

sonuç olarak

Strateji modunun kullanılması karmaşıksa kodu basitleştirebilir ve bakımı kolaylaştırabilirken, özel açıklamaların ve kendi kendine kayıt yöntemlerinin kullanılması, gereksinimlerdeki değişikliklere yanıt vermeyi kolaylaştırabilir. Bu makale sadece genel bir fikir veriyor ve esnek bir şekilde değiştirilebilecek birçok ayrıntı var, örneğin sıralı tipler veya statik sabitler kullanmak gibi. Daha fazla ve daha iyi yöntemler düşünebileceğinize inanıyorum.

Örnek kod: https://github.com/ciphermagic/java-learn/tree/master/sandbox/src/main/java/com/cipher/handler_demo

Bu ne tür bir peri belgesi: Spring Boot'un tüm gerçek işlemlerinin panoramik bir görünümü
önceki
En son programcı maaşı Mart ayında açıklanıyor, hangi aşamadasınız?
Sonraki
Bir programcı hayalini gerçekleştirir ve yarım yıldan fazla bir süredir röportajlara hazırlık deneyimini paylaşır
Birinci sınıf öğrencileri Google için Ali ve Toutiao'dan vazgeçti ve sonunda yıllık maaşı bir milyon olan bir teklif kazandı.
Yu'e Bao'nun eve olan ilgisinin yanı sıra Yu'e Bao ile bir video röportaj bile aldım.
Programcılar, iş aramak için akademik niteliklerini tahrif ediyorlar ve sonunda bir teklif alıyorlar. İK bunu öğrendikten sonra, çevrimiçi yardım isteme şansı vermek ister misiniz?
Hala TCP zaman aşımını ve yeniden iletimini anlamıyor musunuz? Bu uzun makaleyi okumaktan çok yararlanacaksınız
Uluslararası öğrenciler, 500.000 sağlık kiti ve 11 milyon maske yolda
Yeni pnömoni salgını altında İngiliz medyasının Çin'i sahtekarlıkla nasıl lekelediğini görün
Langfang Havaalanı Ekonomik Bölgesi'ndeki belediye kamu hizmetinin inşaatı üç yıl içinde tamamen başlatıldı
15 Haziran'dan önce, Hebei 1 şehrindeki bu 34 doğal nokta yangın önleme nedeniyle kapatıldı
Profesör Li Baoguo'ya çevrimiçi kurban! Onu hatırlayan mum ışığı asla sönmez
Açılışta ABD hisse senetleri yükseldi, Dow kaybettiği zeminin neredeyse yarısını geri aldı
Mercedes-Benz, BMW ve Audi yardım edemez En yüksek indirim 110.000'e kadar Satın almaya değer mi?
To Top