Tôi sẽ tranh luận điều này dọc theo các dòng sau:
- Tại sao chính xác phương thức của bạn trả về nhiều giá trị? Chúng ta đang nói về loại gắn kết nào - những giá trị đó có thực sự là các trường trên một lớp hay chúng chỉ được trả lại ngẫu nhiên theo cùng một phương thức, nhưng nếu không thì không liên quan? Nếu đó là cách thứ hai, bạn có thể muốn xem xét việc chia phương thức thành hai phương thức. Chỉnh sửa: sử dụng phán đoán của bạn ở đây; đôi khi một kiểu gắn kết "trùng hợp" có thể là lựa chọn tốt nhất. Một tùy chọn khác là sử dụng cấu trúc cặp hoặc tuple, mặc dù trong OOP, chúng thường không được nhìn thấy trong các API công khai (một số trường hợp ngoại lệ đáng chú ý là các bộ sưu tập tiêu chuẩn, v.v.).
- Nếu các giá trị xứng đáng để tạo thành một lớp, tôi có thể khuyên bạn không nên sử dụng một lớp bên trong. Các lớp bên trong thường được sử dụng làm chi tiết triển khai bên trong, được ẩn từ bên ngoài. Có bất kỳ lý do tại sao kết quả này không phải là một lớp "toàn diện", theo đúng nghĩa của nó?
- Ngoài việc giữ dữ liệu, hoạt động nào được áp dụng cho lớp mới này? Trong thiết kế hướng đối tượng, bạn muốn có hành vi liên quan gần với dữ liệu liên quan (dường như cũng là ý định của bạn). Có nên dùng phương pháp mà bạn đang đề cập đến không sống trên lớp này không?
Tóm lại, tôi sẽ xem liệu tôi có thể biến "đối tượng dữ liệu" này thành một lớp hoàn chỉnh với cả dữ liệu và hành vi hay không. Là một nhận xét bổ sung, bạn có thể muốn làm cho lớp không thay đổi, vì trạng thái của nó được đặt một lần. Làm cho nó không thay đổi sẽ giúp ngăn không cho nó được đặt không chính xác hoặc sửa đổi sau này (giả sử ai đó đặt một trong các trường thành null và chuyển nó đi cùng).
Chỉnh sửa: Như Patkos Csaba chỉ ra một cách chính xác, nguyên tắc được áp dụng ở đây là Nguyên tắc Trách nhiệm duy nhất ( SRP ) - lớp bạn đang cố gắng tạo nên thực sự có một trách nhiệm (được định nghĩa là lý do để thay đổi ). Hướng dẫn thiết kế này sẽ giúp bạn tìm hiểu xem hai trường của bạn có thuộc một lớp hay không. Để gắn bó với ví dụ Wikipedia, lớp của bạn có thể được xem như một loại báo cáo, trong trường hợp đó, nó phù hợp với SRP, nhưng thật khó để bình luận nếu không có thêm thông tin.
BitInteger[] java.math.BigInteger.divideAndRemainder(BitInteger val)
. Nó trả về 2 số nguyên là giá trị trả về của nó trong một mảng.