Có bất kỳ phương pháp hay nhất nào về việc trả lại các loại trả lại khác nhau về các phương thức quá tải không? Ví dụ nếu tôi có một phương pháp tải trong DAL của tôi, tôi hoặc muốn tải một mục duy nhất hoặc một loạt các mục. Tôi biết rằng tôi có thể sử dụng một số phương pháp:Tôi có nên sử dụng các loại trả lại khác nhau trên các phương thức quá tải không?
tải một đối tượng
MyBusinessObject LoadOne(int id)
{
}
tải nhiều đối tượng
MyBusinessObject[] LoadMany(params int[] ids)
{
}
Bây giờ điều mà tôi biết tôi thể làm là quá tải một phương pháp và có các loại trả về khác nhau. Cũng giống như vậy:
MyBusinessObject Load(int id)
{
}
Và
MyBusinessObject[] Load(params int[] ids)
{
}
Trong khi có vẻ như không có gì để ngăn cản tôi làm điều này là, và nó giữ mọi thứ gọn gàng từ một góc độ API, điều này có vẻ như là một ý tưởng tốt? Tôi đã đi qua nó đêm qua và một phần của tôi nghĩ rằng tôi không nên làm điều này vì lý do muốn kết hợp các loại trả lại cho phương pháp quá tải.
Tôi cũng có thể có phương thức Tải (int id) trả về bộ sưu tập chỉ chứa một mục. Dường như với tôi rằng điều này vi phạm nguyên tắc ít ngạc nhiên nhất mặc dù trong đó nếu bạn đang mong đợi một mục trở lại, bạn nên trả lại mục đó, bạn không nên trả về một danh sách chứa một mục duy nhất.
Vì vậy, đây là những suy nghĩ mâu thuẫn của tôi xung quanh những ý tưởng này:
- phương pháp quá tải tất cả nên quay lại cùng loại.
- Nếu phương pháp làm tương tự, đừng cho họ một loạt các tên khác nhau, quá tải cùng tên phương thức. Nó làm cho mọi thứ trở nên đơn giản hơn từ quan điểm của người dùng API, họ không phải rà soát thông qua một loạt các phương thức khác nhau mà tất cả về cơ bản đều làm tương tự nhưng với các tham số khác nhau.
- Trả lại loại rõ ràng nhất cho phương pháp, tức là nếu người dùng có khả năng mong đợi một tập hợp các mục, hãy trả về một bộ sưu tập các mặt hàng, nếu họ có khả năng mong đợi một mục duy nhất, hãy trả lại một mục.
Vì vậy, hai ý nghĩ sau này vượt trội hơn lần đầu tiên, nhưng đồng thời, ý nghĩ đầu tiên có vẻ giống như một loại thực hành tốt nhất có lập trình.
Có bất kỳ phương pháp hay nhất nào xung quanh thực tiễn này không? Tôi muốn được nghe những suy nghĩ của người khác về chủ đề này.
Trong mọi trường hợp, vui lòng xem xét trả về 'IEnumerable 'thay vì mảng. Eric Lippert có một bài đăng trên blog tuyệt vời về điều này. –
trả về một mảng đủ để làm nổi bật kịch bản. Tôi sẽ trả về một IEnumerable trong mã thực tế của tôi. – BenAlabaster
Được rồi, tuyệt. Chỉ cần bạn biết. –