Czy są jakieś sprawdzone metody zwracania różnych typów zwracania na przeciążonych metodach? Na przykład, jeśli mam metodę ładowania w moim DAL, chcę załadować pojedynczy element lub kilka elementów. Wiem, że mogę korzystać z wielu metod:Czy powinienem używać różnych typów zwrotu na przeciążonych metodach?
Załaduj jeden obiekt
MyBusinessObject LoadOne(int id)
{
}
Ładowanie wielu obiektów
MyBusinessObject[] LoadMany(params int[] ids)
{
}
Teraz coś wiem może zrobić, to przeciążenie jednej metody i mają różne typy zwrotu. Tak:
MyBusinessObject Load(int id)
{
}
I
MyBusinessObject[] Load(params int[] ids)
{
}
Choć wydaje się, nie ma nic, aby zatrzymać mnie w ten sposób, a to sprawia, że coś schludne z perspektywy API, czy to wydawać się dobrym pomysłem? Natknąłem się na niego wczoraj wieczorem i część mnie myśli, że nie powinienem tego robić z powodu konieczności dopasowywania typów powrotu dla przeciążonej metody.
Mogę również mieć metodę Load (int id) zwracającą kolekcję, która zawiera tylko jeden przedmiot. Wydaje mi się, że narusza to zasadę najmniejszego zaskoczenia, ponieważ jeśli spodziewasz się zwrotu jednego elementu, powinieneś zwrócić ten przedmiot, nie powinieneś zwracać listy zawierającej pojedynczy przedmiot.
Więc tutaj są moje myśli na otaczające te pomysły:
- Przeciążone metody powinno wszystko wrócić tego samego typu.
- Jeśli metody robią to samo, nie nadawaj im kilku różnych nazw, przeciąż tę samą nazwę metody. Ułatwia to pracę z perspektywy użytkownika API, nie musi przeszukiwać wielu różnych metod, które zasadniczo robią to samo, ale z różnymi parametrami.
- Zwróć najbardziej oczywisty typ metody, tj. Jeśli użytkownik prawdopodobnie oczekuje kolekcji przedmiotów, zwróć kolekcję przedmiotów, jeśli najprawdopodobniej spodziewają się jednego przedmiotu, zwróć pojedynczy przedmiot.
Dwie ostatnie myśli przeważają nad pierwszą, ale jednocześnie pierwsza myśl wydaje się być programową najlepszą praktyką.
Czy istnieją najlepsze praktyki dotyczące tej praktyki? Byłbym zainteresowany wysłuchaniem myśli innych na ten temat.
W każdym przypadku rozważ proszę zwrócić 'IEnumerable' zamiast tablicy. Eric Lippert ma świetny post na blogu na ten temat. –
wystarczy zwrócić tablicę, aby podświetlić scenariusz. Zwróciłbym IEnumerable w moim rzeczywistym kodzie. – BenAlabaster
Okay, fajnie. Tak długo, jak jesteście świadomi. –