Estoy diseñando un conjunto de objetos de capa 'servicio' (objetos de datos y definiciones de interfaz ) para un servicio web WCF (que se consumirán por clientes externos, es decir, no internos, por lo tanto fuera de mi control directo).¿Debería poner un número de versión principal en un espacio de nombres C#/Java?
sé que soy no va a obtener la definición de interfaz exactamente a la derecha - y me he queriendo prepararse para el momento en que sé que voy a tener que introducir un conjunto ruptura de nuevos objetos de datos. Sin embargo, la realidad del mundo en el que estoy es que también necesitaré ejecutar mi primera versión simultáneamente por bastante tiempo.
La primera versión de mi servicio tendrá el URL de http://host/app/v1service.svc
y cuando llegue el momento de una nueva versión vivirá en http://host/app/v2service.svc
Sin embargo, cuando se trata de los objetos de datos e interfaces, lo estoy jugando con poner la versión 'principal' del número de interfaz en el espacio de nombres real de las clases.
namespace Company.Product.V1
{
[DataContract(Namespace = "company-product-v1")]
public class Widget
{
[DataMember]
string widgetName;
}
public interface IFunction
{
Widget GetWidgetData(int code);
}
}
Cuando llegue el momento de un cambio fundamental en el servicio, voy a introducir algunas clases como
namespace Company.Product.V2
{
[DataContract(Namespace = "company-product-v2")]
public class Widget
{
[DataMember]
int widgetCode;
[DataMember]
int widgetExpiry;
}
public interface IFunction
{
Widget GetWidgetData(int code);
}
}
Las ventajas como la veo son que voy a ser capaz de tener una sola conjunto de código que sirve ambas versiones de interfaz, compartiendo la funcionalidad siempre que sea posible. Esto se debe a que I podrá hacer referencia a ambas versiones de interfaz como un conjunto distinto de de objetos C#. De manera similar, los clientes pueden usar ambas versiones de la interfaz simultáneamente, tal vez usando V1.Widget en algún código heredado mientras que los nuevos bits se mueven al widget V2.Widget.
¿Alguien puede decir por qué esta es una idea estúpida? Tengo una molesta sensación que esto es un poco mal ..
notas: Obviamente no estoy proponiendo cada nueva versión única del servicio estaría en un nuevo espacio de nombres. Presumiblemente, haré tantos cambios de interfaz sin interrupción como sea posible, pero sé que I alcanzará un punto donde todos los modelos de datos probablemente necesitarán una reescritura significativa .
Entiendo versiones de montaje etc, pero creo que esta pregunta es tangencial a ese tipo de control de versiones. Pero podría estar equivocado.