Pregunta

Tengo clase de método que devuelve una lista de los empleados que puedo recorrer.¿Cuál es la mejor manera para volver a la lista?Normalmente yo acabo de volver de un ArrayList.Sin embargo, como yo lo entiendo, las interfaces son más adecuados para este tipo de acción.Cual sería la mejor interfaz a utilizar?También, ¿por qué es mejor retorno de una interfaz, en lugar de la aplicación (dicen objeto ArrayList)?Me parece mucho más trabajo para mí.

¿Fue útil?

Solución

Personalmente, me gustaría utilizar un Lista<Employee> para crear la lista en el servidor y, a continuación, utilizar IList cuando regrese.Cuando el uso de interfaces, se le da la flexibilidad para cambiar la aplicación, sin tener que alterar quién está usando su código.Si quería seguir con un ArrayList, que sería un no-genérico IList.

Otros consejos

@ Jason

Usted puede también volver IList<> porque una matriz en realidad implementa esta interfaz.

La mejor manera de hacer algo como esto sería para volver, como usted dice, una Lista, de preferencia el uso de medicamentos genéricos, por lo que sería la Lista<Employee>.

Devuelve una Lista en lugar de un objeto ArrayList significa que si más tarde decide utilizar, por ejemplo, un LinkedList, usted no tiene que cambiar nada del código que no es el de crear el objeto para empezar (me.e, la llamada "new ArrayList())".

Si todo lo que están haciendo es recorrer la lista, puede definir un método que devuelve la lista como IEnumerable (para .NET).

Por la devolución de la interfaz que proporciona la funcionalidad que usted necesita, si algún nuevo tipo de colección viene en el futuro que es mejor/más rápido/más adecuado para su aplicación, mientras que todavía se implementa IEnumerable completo se puede reescribir su método, utilizando el nuevo tipo dentro de ella, sin cambiar nada del código que llama.

¿Hay alguna razón la colección debe ser ordenado?¿Por qué no simplemente a cambio de una IEnumerable<Employee>?Esto le da el mínimo que se requiere - si más adelante desea alguna otra forma de almacenamiento, como una Bolsa o un Conjunto o un Árbol o lo que sea, el contrato permanecerá intacta.

Estoy en desacuerdo con la premisa de que es mejor regresar de una interfaz.Mi razón es que usted desea maximizar la utilidad de un determinado bloque de código que se expone.

Con eso en mente, una interfaz de obras para la aceptación de un elemento como un argumento.Si un parámetro de la función de llamadas para una matriz o un objeto ArrayList, que es la única cosa que puede pasar a él.Si un parámetro de la función de llamadas para un IEnumerable va a aceptar, así como un número de otros objetos.Es más útil

El valor de retorno, sin embargo, trabaja de forma opuesta.Cuando usted devuelve un IEnumerable, la única cosa que usted puede hacer es enumerar ella.Si usted tiene una Lista a la mano y regresa el código que llama a su función también puede hacer fácilmente un número de otras cosas, como obtener un recuento.

Yo estoy unido con aquellos que le aconseja alejarse de la ArrayList, aunque.Los medicamentos genéricos son así que mucho mejor.

Una interfaz es un contrato entre la aplicación y el usuario de la aplicación.

Mediante el uso de una interfaz, se debe permitir la implementación de un cambio tanto como se quiera siempre y cuando se mantiene el contrato para los usuarios.

También permite que varias de las implementaciones para el uso de la misma interfaz para que los usuarios puedan reutilizar el código que interactúa con la interfaz.

No dices qué idioma estás hablando, pero en algo .NETish, entonces no hay más trabajo para devolver un IList de una Lista o incluso un ArrayList, a pesar de que la mera mención de que el obsoleta de la clase me hace pensar que no estamos hablando .NET.

Una interfaz es esencialmente un contrato en que una clase tiene ciertos métodos o atributos;programación de una interfaz en lugar de directa aplicación permite más dinámico y fácil de administrar el código, ya que puede cambiar las implementaciones de tan largo como el "contrato" que se sigue celebrando.

En el caso de que usted describe, pasando de una interfaz no te da una ventaja en particular, si fuera yo, me gustaría pasar el ArrayList con el tipo genérico, o pasar la Matriz en sí:lista.toArray()

En realidad, usted no debería devolver una Lista si eso es un marco, al menos no sin pensarlo, la clase recomendado para uso es una Colección.La Lista de la clase tiene algunas mejoras de rendimiento en el costo de servidor de ampliación problemas.De hecho, es un FXCop regla.

Usted tiene el razonamiento de que en este artículo

Tipo devuelto por el método debe ser IList<Employee>.

Eso significa que la llamada al método se puede utilizar cualquier cosa que IList ofrece, pero no puede usar cosas que son específicas para ArrayList.Entonces, si usted se siente en algún punto de que LinkedList o YourCustomSuperDuperList ofrece un mejor rendimiento u otras ventajas que usted puede utilizar de forma segura dentro de su método y no el tornillo de los que llaman de la misma.

Eso es más o menos interfaces 101.;-)

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top