Điều quan trọng nhất cần nhớ là đó là những hướng dẫn, không phải là quy tắc.
Có những trường hợp một phương thức đơn giản phải lấy một đối số. Hãy suy nghĩ về +
phương pháp cho các số, ví dụ. Hoặc add
phương pháp cho một bộ sưu tập.
Trong thực tế, người ta thậm chí có thể lập luận rằng ý nghĩa của việc thêm hai số phụ thuộc vào ngữ cảnh, ví dụ như trong ℤ 3 + 3 == 6
, nhưng trong ℤ | 5 3 + 3 == 2
, vì vậy, toán tử bổ sung phải là một phương thức trên một đối tượng bối cảnh có hai đối số thay vì một đối số phương pháp trên các số có một đối số.
Tương tự, một phương thức để so sánh hai đối tượng phải là phương thức của một đối tượng lấy đối tượng kia làm đối số hoặc phương thức của bối cảnh, lấy hai đối tượng làm đối số, vì vậy đơn giản là không có phương thức so sánh với ít hơn một đối số.
Điều đó nói rằng, có một vài điều có thể được thực hiện để giảm số lượng đối số cho một phương thức:
- Làm cho phương thức tự nhỏ hơn : Có thể, nếu phương thức cần nhiều đối số, thì nó đang làm quá nhiều?
- Một sự trừu tượng bị thiếu : Nếu các đối số có mối tương quan chặt chẽ với nhau, có thể chúng thuộc về nhau và có một sự trừu tượng hóa mà bạn đang thiếu? (Ví dụ về sách giáo khoa Canonical: thay vì hai tọa độ, truyền một
Point
đối tượng hoặc thay vì chuyển tên người dùng và email, hãy chuyển một IdCard
đối tượng.)
- Trạng thái đối tượng : Nếu đối số là cần thiết bởi nhiều phương thức, có lẽ nó phải là một phần của trạng thái đối tượng. Nếu nó chỉ cần một số phương thức chứ không phải các phương thức khác, có thể đối tượng đang làm quá nhiều và thực sự phải là hai đối tượng.
Một cách là trích xuất các đối số vào một lớp mới, nhưng điều đó chắc chắn sẽ dẫn đến sự bùng nổ của các lớp?
Nếu mô hình miền của bạn có nhiều loại khác nhau, thì mã của bạn sẽ kết thúc với nhiều loại đối tượng khác nhau. Không có gì sai với điều đó.
Và các lớp đó có khả năng kết thúc bằng các tên vi phạm một số quy tắc đặt tên (kết thúc bằng "Dữ liệu" hoặc "Thông tin", v.v.)?
Nếu bạn không thể tìm thấy một tên thích hợp, có thể bạn đã nhóm quá nhiều đối số lại với nhau hoặc quá ít. Vì vậy, bạn chỉ có một mảnh của một lớp hoặc bạn có nhiều hơn một lớp.
Một kỹ thuật khác là biến các biến được sử dụng bởi nhiều hàm thành một biến thành viên riêng để tránh truyền chúng, nhưng điều đó mở rộng phạm vi của biến, có thể là nó mở cho các hàm không thực sự cần nó.
Nếu bạn có một nhóm phương thức tất cả các phương thức hoạt động trên cùng một đối số và một nhóm phương thức khác không có, có thể chúng thuộc các lớp khác nhau.
Lưu ý tần suất tôi sử dụng từ "có thể"? Đó là lý do tại sao đó là hướng dẫn, không phải là quy tắc. Có lẽ phương pháp của bạn với 4 tham số là hoàn toàn tốt!