2010-12-30 26 views
5

Estoy a punto de diseñar mi API de servicios web, la mayoría de las funciones de mi API son básicamente muy similares a las de mi aplicación web.Diseño de software y diseño de servicios web

Ahora la pregunta es, ¿debería crear 1 único método y volver a utilizarlos para la aplicación web y la API del servicio web? (Esta parece ser la solución lógica, sin embargo es muy complicada, es mucho más fácil duplicar el método utilizado por la aplicación web y mantener ambos separados, es decir, un método para la aplicación web y un método para el servicio web)

¿Cómo lo hacen?

1) Reutilización: un método principal y volver a utilizarlos tanto para aplicaciones web y aplicaciones de servicios web (me gusta esto, pero es complicado)

  • WebAppMethodX --uses -> COMMONFUNCTIONMETHOD_X
  • APIMethodX - --uses ----> COMMONFUNCTIONMETHOD_X

es decir Commonfunctionmethod_x contiene el conjunto reutilizable de características comunes

PRO: menos código, menos mantenimiento, menos errores.

CON: muy complicado

2) duplicado: dos métodos, un método para la aplicación web y un método para el servicio web.

  • WebAppMethodX
  • APIMethodX

PRO: sencilla

CON: la duplicación = más código, más mantenimiento, más errores!

Respuesta

3

Es probable que su caso de uso sea diferente para su API de servicio web público que para su API de aplicación interna. Cree un proyecto/nivel de servicio común y use ese mismo nivel tanto desde su aplicación web como desde su API pública de servicios web. Cree un método http invocable por separado para cada una de sus aplicaciones web y su servicio web.

Todo se reduce a estar allí

1) diferentes problemas de seguridad. Por ejemplo, es bueno (a menudo necesario) proporcionar una aplicación de cliente de muestra que haga uso de su API pública para que otros puedan ponerse al día rápidamente con lo que ha proporcionado. Esa API de cliente puede necesitar pasar las construcciones de objetos que usted les proporciona que han sido despojadas de lógica/contenido interno y seguro.(Recuerde que compilado C# podría ser texto claro con Reflector!)

2) diferentes necesidades y limitaciones. Por ejemplo, en el caso de una llamada a una aplicación interna, algunas veces se aplicarán diferentes reglas comerciales frente a su API pública de servicios web (a menudo, esta última se ve mucho más limitada por el alcance).

Si diseña su lógica de negocio en su capa de servicio e invoca bien esas clases/métodos desde su proyecto web y su proyecto de servicio web, tendrá mucha reutilización de código sin intentar complicar demasiado las cosas mezclando el uso casos.

1

Un método, en el servicio web, y haga que su aplicación web lo llame.

No entiendo qué significa "un método principal" para ambos. Las aplicaciones web no tienen un método principal; están implementados en un servidor de aplicaciones.

Otro punto a tener en cuenta: debe escribir su servicio en términos de una interfaz POCO. Una vez que haces eso, la implementación se convierte en una elección que realizas.

+2

... esta es una pregunta de C#, no Java por lo que * POCO * en lugar de POJO es apropiado y JAR es irrelevante – Tahbaza

+0

Las ideas son las mismas, pero gracias por la edición. JAR puede ser irrelevante, pero una DLL compartida puede no serlo. – duffymo

1

Un método. De lo contrario, cuando encuentres un error y lo arregles en uno, entonces olvídalo en el otro ... llorarás.

+0

Sí, esto es bueno, ¡requiere menos trabajo de mantenimiento! sin embargo es muy complicado :( – 001

+0

He hecho una tarea muy similar, y sí, se necesita un mejor diseño. Trabajé en una API de computación en la nube que abarcaba los lenguajes. Créanme, realmente quieren usar el patrón del adaptador. – EnabrenTane

+0

I ' Estoy pensando qué hacer ahora ... decisión difícil :( – 001

0

Depende ..

Normalmente, los separaría. De esta forma, se elimina la interdependencia entre dos procesos de alto nivel. la reutilización de código es buena dentro de un proceso, pero a veces se desea poder utilizar una aplicación diferente en el mismo servicio.

Si los dos son altamente dependientes entre sí, sin embargo, querrá volver a utilizar las mismas funciones para que al cambiarlo en un lugar lo cambie en otro. Evitando así más problemas potenciales con el proceso de desarrollo.

Cuestiones relacionadas