2011-07-25 7 views
6

Actualmente estoy trabajando en un servicio WCF con una gran cantidad de métodos definidos en la interfaz. La mayoría de estos métodos son simples operaciones CRUD con un poco de lógica utilizando el marco de entidad, y podrían dividirse en áreas funcionales con bastante facilidad. Solo hay un archivo que se acerca a 1K de líneas de código y me gustaría dividirlo para mantenerlo. Estoy considerando lo siguiente:¿Cuál es una buena manera de organizar una gran cantidad de métodos en un servicio .NET WCF?

  • Divida el archivo de servicio en clases parciales. Pero aún sería una clase única con un código de gran cantidad. Sin embargo, creo que esto realmente no es un problema.
  • Tiene una sola clase que implementa la interfaz de servicio con el manejo de errores estándar y la creación/destrucción de ObjectContext, pero enruta las llamadas a las clases de ayuda estática. He hecho esto antes, pero de alguna manera no me parece limpio.

Además, ¿sería mejor dividir por área funcional, o por métodos CRUD (agrupar todo, crear juntos, etc.).

Esto debe ser un problema muy común cuando se trata de servicios WCF. ¿Cuál es una buena manera de organizar los métodos de servicio WCF?

actualización

Al final, decidí pasar las llamadas de servicio a clases estáticas internas.

+1

Depende de la naturaleza de los métodos: ¿son fácilmente agrupables por la función byt? ¿Hay similitudes entre ellos? Y cuál es el motivo para querer dividirlos: mantenibilidad, capacidad de actualización o qué. Las respuestas afectan las sugerencias. –

+0

Se pueden agrupar fácilmente por área funcional. La razón para dividirlos es para mantenerlos. – Mas

+0

La mayoría de las veces que empiezas a pensar en utilizar clases parciales porque tu clase es demasiado grande, sabes que es hora de refactorizar ... – codymanix

Respuesta

8

Si las operaciones se pueden agrupar por áreas funcionales, deberían ser servicios separados porque el servicio como cualquier otra clase debería tener una sola responsabilidad = área funcional única.

Generalmente, si su servicio tiene muchas operaciones, es hora de pensar en su división. También lo más frecuente es que el servicio WCF sea solo envoltorio de alguna lógica para que pueda crear instancias de otras clases envolviendo su lógica o utilizando clases estáticas en sus operaciones de servicio.

Editar:

En general estoy contra el uso de las clases parciales para romper una clase grande - en mi opinión, no mejora la capacidad de mantenimiento. Una vez que una clase es tan grande que está buscando una solución para dividirla en varios archivos, ya significa que la refactorización debería haber sido hecha hace mucho tiempo. En el peor de los casos, cuando tu clase está haciendo demasiado, podemos llamarlo anti patrón: God object.

+0

En general estoy de acuerdo. Puedo ver, sin embargo, que en el caso de un servicio web, podría haber un caso para hacer esto, y no creo que tienda necesariamente hacia el Objeto de Dios. En una clase interna, es definitivamente incorrecto. –

+0

@Schroedingers Gato: Depende. Si su servicio es solo envoltorio de alguna otra lógica y expone métodos de un área funcional, entonces incluso una clase grande con muchos métodos puede tener sentido. Pero si el servicio realmente hace la lógica desde múltiples áreas funcionales, entonces es tan malo como con la clase interna. –

2

Para el mantenimiento, el uso de clases parciales parece ser una buena opción. Si se dividen funcionalmente, se mejora la capacidad de mantenimiento, ya que solo debe mirar una o dos de estas clases.

El hecho de que todavía hay una gran clase con muchos métodos no es realmente un problema sobre la base de sus respuestas. Debe ser mantenible.

Pero, para seguir @Ladislav, ¿tiene algún valor para separarlos en servicios separados? Supuse que no, de lo contrario hubieras hecho eso.

+0

No veo ningún valor en la división en diferentes servicios. Actualmente, no son MUCHOS métodos, pero el código está comenzando a crecer, y quiero refactorizar antes de que sea demasiado grande. – Mas

+0

Tal vez el momento de la idea para dividir. Pero conoces tu propio código y entorno mejor que yo, así que es tu decisión. –

Cuestiones relacionadas