Đôi khi (hiếm khi), có vẻ như việc tạo ra một hàm cần một lượng tham số kha khá là con đường tốt nhất.
Sử dụng một vài tham số thường là một chỉ báo rõ ràng, rằng bạn vi phạm SRP trong phương pháp này. Một phương thức, cần nhiều tham số không chắc chỉ làm một việc. Excpetion có thể là một hàm toán học hoặc một phương thức cấu hình, trong đó thực sự cần một vài tham số như vậy. Tôi sẽ tránh nhiều thông số vì ma quỷ tránh nước thánh. Càng sử dụng nhiều tham số trong một phương thức, cơ hội càng cao, phương thức đó (quá) phức tạp; sự phức tạp hơn có nghĩa là: khó duy trì hơn và đó là ít mong muốn hơn.
Tuy nhiên, khi tôi làm, tôi cảm thấy như tôi thường chọn thứ tự các tham số một cách ngẫu nhiên. Tôi thường đi theo "thứ tự quan trọng", với tham số quan trọng nhất trước tiên.
Trong prinipl bạn đang chọn ngẫu nhiên . Tất nhiên bạn có thể nghĩ tham số A có liên quan nhiều hơn tham số B ; nhưng đó có thể không phải là trường hợp đối với người dùng API của bạn, người cho rằng B là tham số phù hợp nhất. Vì vậy, ngay cả khi bạn đã chú ý trong việc lựa chọn thứ tự - đối với những người khác, điều đó có vẻ ngẫu nhiên .
Có cách nào tốt hơn để làm điều này? Có cách "thực hành tốt nhất" để đặt hàng các tham số giúp tăng cường sự rõ ràng không?
Có một số cách:
a) Trường hợp tầm thường: Không sử dụng nhiều hơn một tham số.
b) Vì bạn không chỉ định, ngôn ngữ bạn đã chọn, có khả năng là bạn đã chọn ngôn ngữ có tham số được đặt tên . Đây là đường cú pháp đẹp cho phép bạn nới lỏng tầm quan trọng của việc sắp xếp các thông số:fn(name:"John Doe", age:36)
Không phải ngôn ngữ nào cũng cho phép những thứ tốt đẹp như vậy. Sau đó thì sao?
c) Bạn có thể sử dụng một từ điển / Hashmap / Mảng liên kết làm tham số: ví dụ: Javascript sẽ cho phép các điều sau: fn({"name":"John Doe", age:36})
không xa (b).
d) Tất nhiên nếu bạn làm việc với một ngôn ngữ được gõ tĩnh như Java. bạn có thể sử dụng Hashmap , nhưng bạn sẽ mất thông tin loại (ví dụ: khi làm việc với HashMap<String, Object>
) khi các tham số có các loại khác nhau (và cần truyền).
Bước hợp lý tiếp theo sẽ là vượt qua Object
(nếu bạn đang sử dụng Java) với các thuộc tính phù hợp hoặc thứ gì đó nhẹ hơn như một cấu trúc (nếu bạn viết ví dụ C # hoặc C / C ++).
Quy tắc của ngón tay cái:
1) Trường hợp tốt nhất - phương pháp của bạn không cần tham số nào cả
2) Trường hợp tốt - phương pháp của bạn cần một tham số
3) Trường hợp chấp nhận được - phương thức của bạn cần hai tham số
4) Tất cả các trường hợp khác nên được tái cấu trúc
MessageBox.Show
. Nhìn vào đó là tốt.