2016-05-14 65 views
5

Bazı özelliklere göre kişiyi döndürmesi gereken bir hizmetim var.Java yöntemi adlandırma kuralları ve aşırı yükleme

birincisi: Ve bu yöntemleri adlandırmak için iki strateji bkz

getPersonById(int id) 
getPersonByBirthDate(Date date) 
getPersonByBirthDateAndSex(Date date,Sex sex) 
getPersonByNameAndSex(String name,Sex sex) 
getPersonByBirthDateAndNameAndSex(Date date,String name,Sex sex) 
etc.. 

veya aşırı kurallarını uygulayarak yapın: java adlandırma kuralına göre haklı

getPerson(int id) 
getPerson(Date date) 
getPerson(Date date,Sex sex) 
getPerson(String name,Sex sex) 
getPerson(Date date,String name,Sex sex) 

?

+0

her ikisi de convetion adlandırarak tamamdır. Ancak, kurumsal dünyada ve Clean Code prensibi ile, ilk seçeneği kullanmak için daha iyi, onun adını ne yaptığını açıkladığından beri ... –

+0

evet @AdnanIsajbegovic katılıyorum ya da istirahat için önemli değer için kurucu kullanabilirsiniz tercih edilir – emotionlessbananas

+0

Birincisi - bu şekilde kod kendini belgeliyor. İkincisi, IDE'nize hangi yöntemin çağrıldığını sormanız gerekebilir, bu da kodu daha kısa sürede okunabilir hale getirir. –

cevap

2

Aşırı yükleme her zaman daha iyidir. Birçok java tabanlı KNOWN çerçevesi bu yaklaşımı izler. Ayrıca, ana aşırı yükleme kavramı, bahsettiğiniz durumdan kaynaklanmaktadır.

Aşırı yüklenmiş yöntemlere sahip olmak, geliştiricinin okunabilirliğini basitleştirir; çünkü hiçbir ayrı adın hatırlanması gerekmez. Ayrıca, eclipse'nin Ctrl + Alanı özelliği, her zaman kullanmak istediğiniz yöntemi önerir.

+0

"_KNOWN framework_" nedir? –

+0

, JDK'dan (ör., "StringBuider # append") – Andrew

+0

@BoristheSpider ATG ("Sanat Teknoloji Grubu"), Broadleaf Commerce'den örnekler sunabilir, hatta Java'nın kütüphaneleri bu yaklaşımı kullanır. En çok "KNOWN" yöntemi "println()" da aşırı yüklenmiştir. :) – Monis

9

Aşırı yükleme sorusundan bağımsız olarak, tasarımınız kombinatoryal API patlamasından muzdariptir: Tüm olası arama kriteri kombinasyonları için yöntemler tanıtmaya başlıyorsunuz. Bir alternatif, kriterleri toplayan ve sonunda kişiyi döndüren bir inşaatçıyı tanıtmak olabilir.

Örnek:

queryPerson().byId(5).run(); 
queryPerson().byName("John").bySex(Sex.MALE).run(); 
queryPerson().bySex(Sex.FEMALE).run(); 

Ve servis API artık sadece güzel bir queryPerson() yöntemi vardır.

+0

@fabian, iyi fikir, 'queryPerson' olarak değiştirildi – wero

İlgili konular