¿Existen mejores prácticas para devolver diferentes tipos de devolución en métodos sobrecargados? Por ejemplo, si tengo un método Load en mi DAL, o deseo cargar un solo elemento o un grupo de elementos. Sé que podría utilizar una serie de enfoques:¿Debo usar diferentes tipos de devolución en métodos sobrecargados?
Cargar un objeto
MyBusinessObject LoadOne(int id)
{
}
cargar varios objetos
MyBusinessObject[] LoadMany(params int[] ids)
{
}
Ahora algo que sé que puede hacer es sobrecargar un método y tener diferentes tipos de devolución. De este modo:
MyBusinessObject Load(int id)
{
}
Y
MyBusinessObject[] Load(params int[] ids)
{
}
Aunque parece que no hay nada que dejara de hacer esto, y que mantiene las cosas ordenadas desde una perspectiva API, sí parece esto como una buena idea? Lo descubrí anoche y una parte de mí piensa que no debería estar haciendo esto por el deseo de hacer coincidir los tipos de devolución para el método sobrecargado.
También podría hacer que el método Load (int id) devuelva una colección que solo contiene un elemento. Me parece que esto viola el principio de la menor sorpresa, aunque si esperas que se devuelva un artículo, debes devolverlo, no debes devolver una lista que contenga un solo artículo.
Así que aquí están mis pensamientos contradictorios que rodean estas ideas:
- Los métodos sobrecargados todos deben devolver el mismo tipo.
- Si los métodos hacen lo mismo, no les dé un montón de nombres diferentes, sobrecargue el mismo nombre de método. Hace las cosas más simples desde la perspectiva de un usuario API, no tienen que navegar a través de un montón de métodos diferentes que esencialmente hacen lo mismo pero con diferentes parámetros.
- Devuelva el tipo más obvio para el método, es decir, si el usuario probablemente espera una colección de artículos, devuelva una colección de artículos, si es probable que esperen un solo artículo, devuelva un solo artículo.
De modo que las dos últimas ideas superan a la primera, pero al mismo tiempo, el primer pensamiento parece una especie de práctica programática.
¿Existen mejores prácticas en esta práctica? Me interesaría escuchar los pensamientos de otros sobre el tema.
En cualquier caso, considere devolver 'IEnumerable 'en lugar de una matriz. Eric Lippert tiene una gran publicación en el blog sobre esto. –
devolver una matriz es suficiente para resaltar el escenario. Volvería un IEnumerable en mi código actual. – BenAlabaster
De acuerdo, genial. Siempre que estés enterado. –