Java spring framework JPA Repository'de kullanılan dinamik yapıyı basitçe gerçekleşmeye çalıştığım bir projeyi paylaşmak istiyorum.
Amaç repository'de kullanılacak query method imzalarını sadece interface'de tanımlayarak, gerçekte method'u implemente etmeden, dynamic olarak çalıştırılması.
Bir Product nesnemiz var ve bu nesneden oluşmuş bir DataSet'imiz var diyelim.
Bu dataset üzerinde yapılabilecek query'ler için ortak bir dil oluşturup buna uygun method isimleriyle tanımlanmış interface'ler ile sorgulamaları gerçekleştirmek için aşağıdaki gibi bir interface tanımlamak yeterli. Bu interface'i implemente etmemize gerek yok. Method'lar, method isimlerinden yola çıkarak dynamic olarak çalıştırılabilir.
getBy ile başlayan methodlar scalar bir result geriye döndürürken findBy ile başlayan methodlar bir list geriye döndürür.
Sonraki kısım sorgulamaya konu olan property name. Sonrası ise yapılacak karşılaştırmanın türünü belirtir.
Tüm projeyi ekliyorum.
Daha epeyce geliştirmeye ihtiyacı var ancak temel olarak ilham verici olabilir belki.
Amaç repository'de kullanılacak query method imzalarını sadece interface'de tanımlayarak, gerçekte method'u implemente etmeden, dynamic olarak çalıştırılması.
Bir Product nesnemiz var ve bu nesneden oluşmuş bir DataSet'imiz var diyelim.
Bu dataset üzerinde yapılabilecek query'ler için ortak bir dil oluşturup buna uygun method isimleriyle tanımlanmış interface'ler ile sorgulamaları gerçekleştirmek için aşağıdaki gibi bir interface tanımlamak yeterli. Bu interface'i implemente etmemize gerek yok. Method'lar, method isimlerinden yola çıkarak dynamic olarak çalıştırılabilir.
Kod: (Select All)
IProductRepository = interface(IRepositoryBase)
function getByNameIs(const aName: string): TProduct;
function findByPriceIsLessThan(const aPrice: double): TList<TProduct>;
function findByPriceIsGreaterThan(const aPrice: double): TList<TProduct>;
end;
getBy ile başlayan methodlar scalar bir result geriye döndürürken findBy ile başlayan methodlar bir list geriye döndürür.
Sonraki kısım sorgulamaya konu olan property name. Sonrası ise yapılacak karşılaştırmanın türünü belirtir.
Tüm projeyi ekliyorum.
Daha epeyce geliştirmeye ihtiyacı var ancak temel olarak ilham verici olabilir belki.