GRASP öğrenmeye çalışıyorum ve bu düşük kuplaj hakkında açıkladı ( burada sayfa 3 ) ve bunu bulduğumda çok şaşırdım:
addTrack
BirAlbum
sınıfın yöntemini düşünün , iki olası yöntem şunlardır:
addTrack( Track t )
ve
addTrack( int no, String title, double duration )
Hangi yöntem kuplajı azaltır? İkincisi, Album sınıfını kullanan sınıfın bir Track sınıfı bilmek zorunda olmadığı için. Genel olarak, yöntem parametreleri, java. * Paketlerinden temel türleri (int, char ...) ve sınıfları kullanmalıdır.
Ben buna katlanıyorum; Çeşitli nedenlerden addTrack(Track t)
daha iyi olduğuna inanıyorum addTrack(int no, String title, double duration)
:
Bir yöntemin mümkün olduğu kadar az parametreye sahip olması her zaman daha iyidir (Bob Amca'nın Temiz Koduna göre hiçbiri veya bir, tercihen bazı durumlarda 2 ve özel durumlarda 3; Yeniden düzenlemeye ihtiyaç vardır - bunlar elbette kutsal kurallar değildir) .
Bir
addTrack
arabirim yöntemiyse ve gereksinimlerin a'nınTrack
daha fazla bilgiye sahip olması gerekir (örneğin yıl veya tür), arabirimin değiştirilmesi gerekir ve böylece yöntemin başka bir parametreyi desteklemesi gerekir.Kapsülleme kırılmıştır; eğer
addTrack
bir arayüzdeyse, o cihazın içini bilmemelidirTrack
.Aslında birçok yönden ikinci yolla daha fazla birleşmiştir. Varsayalım
no
parametre ihtiyaçlarını değiştirilebilir içinint
içinlong
fazla olduğundanMAX_INT
parça (veya herhangi bir nedenle); bu durumda hem veTrack
hem de yöntemin değiştirilmesi gerekirken, yöntemaddTrack(Track track)
yalnızca buTrack
yöntemse değişecektir.
4 argümanın hepsi aslında birbiriyle bağlantılıdır ve bazıları diğerlerinin sonuçlarıdır.
Hangi yaklaşım daha iyi?