Bir mimaride çalışıyorum, web istemcisi ve mobil uygulamalar için bir dinlenme API'si sunacak. Spring kullanıyorum (spring mvc, spring data jpa, ... etc). Etki alanı modeli JPA belirtimi ile kodlanmıştır.
Bazı temiz mimari kavramlarını uygulamaya çalışıyorum ( https://8thlight.com/blog/uncle-bob/2012/08/13/the-clean-architecture.html ). Hepsi değil, çünkü jpa etki alanı modelini koruyacağım.
Katmanlar arasındaki gerçek akış şudur:
Kullanıcı arabirimi <--> API Hizmeti -> Hizmet -> Depo -> DB
- Kullanıcı arabirimi : web istemcisi, mobil uygulamalar
- API Hizmeti : Dinlenme Denetleyicileri, burada dönüştürücüler, dto ve çağrı hizmetleri kullanıyorum
- Hizmet : Uygulamalarla arayüzler ve iş mantığı içerir
- Havuz : CRUD işlemlerini ve belki de bazı sql sorgularını barındıran otomatik uygulamalara sahip (yay verileri jpa tarafından yapılır) havuz arabirimleri
Şüphem: Hizmet ve depo arasında fazladan bir katman kullanmalı mıyım?
Bu yeni akışı planlıyorum:
Kullanıcı arabirimi <--> API Hizmeti -> Hizmet -> Kalıcılık -> Depo -> DB
Bu kalıcılık katmanını neden kullanmalıyım? Temiz mimari makalesinde söylediği gibi, agnostik bir kalıcılık katmanına erişen bir hizmet uygulamasına (iş mantığı veya kullanım durumu) sahip olmak istiyorum. Başka bir "veri erişimi" kalıbı kullanmaya karar verirsem, örneğin depo kullanmayı bırakmaya karar verirsem değişiklik yapmaya gerek kalmaz.
class ProductServiceImpl implements ProductService {
ProductRepository productRepository;
void save(Product product) {
// do business logic
productRepository.save(product)
}
}
Bu yüzden böyle bir kalıcılık katmanı kullanmayı düşünüyorum:
class ProductServiceImpl implements ProductService {
ProductPersistence productPersistence;
void save(Product product) {
// do business logic
productPersistence.save(product)
}
}
ve kalıcılık katmanının şu şekilde uygulanması:
class ProductPersistenceImpl implements ProductPersistence {
ProductRepository productRepository;
void save(Product product) {
productRepository.save(product)
}
}
Bu yüzden sadece kalıcılık katmanı uygulamalarını değiştirmem gerekiyor, hizmeti değişiklik yapmadan bıraktım. Havuzun çerçeveyle ilgili olması gerçeğiyle çiftleşti.
Ne düşünüyorsun? Teşekkürler.