Tôi đang cố gắng học GRASP và tôi đã tìm thấy điều này được giải thích ( ở đây trên trang 3 ) về Low Coupling và tôi đã rất ngạc nhiên khi tôi tìm thấy điều này:
Hãy xem xét phương thức
addTrack
cho mộtAlbum
lớp, hai phương thức có thể là:
addTrack( Track t )
và
addTrack( int no, String title, double duration )
Phương pháp nào làm giảm khớp nối? Cái thứ hai thì có, vì lớp sử dụng lớp Album không cần phải biết lớp Track. Nói chung, các tham số cho các phương thức nên sử dụng các kiểu cơ sở (int, char ...) và các lớp từ các gói java. *.
Tôi có xu hướng diasgree với điều này; Tôi tin addTrack(Track t)
là tốt hơn addTrack(int no, String title, double duration)
vì nhiều lý do:
Luôn luôn tốt hơn cho một phương thức càng ít tham số càng tốt (theo Bộ luật sạch của chú Bob không hoặc tốt nhất là 2 trong một số trường hợp và 3 trong trường hợp đặc biệt; hơn 3 nhu cầu tái cấu trúc - tất nhiên đây là những khuyến nghị không phải là quy tắc chung) .
Nếu
addTrack
là một phương thức của một giao diện và các yêu cầu cầnTrack
có thêm thông tin (giả sử năm hoặc thể loại) thì giao diện cần phải được thay đổi và do đó phương thức sẽ hỗ trợ một tham số khác.Đóng gói bị phá vỡ; nếu
addTrack
là trong một giao diện, thì nó không nên biết nội bộ củaTrack
.Nó thực sự được kết hợp nhiều hơn theo cách thứ hai, với nhiều tham số. Giả sử
no
tham số cần được thay đổi từint
thànhlong
vì có nhiều hơnMAX_INT
các bản nhạc (hoặc vì bất kỳ lý do gì); sau đó cảTrack
phương thức và phương thức cần phải được thay đổi trong khi nếu phương thứcaddTrack(Track track)
chỉ là phương thứcTrack
sẽ được thay đổi.
Tất cả 4 đối số thực sự được kết nối với nhau, và một số trong số chúng là hậu quả từ những người khác.
Cách tiếp cận nào tốt hơn?