Соглашения об именах WCF для расширенных методов
У меня есть метод, представленный как OperationContract для моей службы WCF, который я хотел бы переработать. Предыдущий программист написал что-то вроде:
public ReportResultObject GetReport(string stringContainingParameters)
Я хотел бы иметь метод, который является чем-то вроде этого:
public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation)
Поскольку WCF не допускает перегруженных методов без указания атрибута Name в OperationContract, и я не хочу нарушать работу текущих клиентов, существует ли соглашение об именах для подобных ситуаций? Что-то вроде GetReportV2 или GetReportHeyUseMeInstead?
4 ответа
Делая то же самое снова, вы просто настраиваете себя на тот же "беспорядок", когда вам нужно добавить еще один параметр. Я настоятельно рекомендую вам взглянуть на наличие единственного параметра, который является контрактом данных;
public ReportResultObject GetReportTheSuperDooperWay(
GetReportParameters parameters)
Что это дает вам? Что ж
[DataContract]
public class GetReportParameters
{
[DataMember(IsRequired=false)]
public string parameters;
[DataMember(IsRequired=false)]
public int[] someIds;
[DataMember(IsRequired=false)]
bool includeAdditionalInformation
}
Таким образом, поскольку каждое поле является необязательным, вы можете добавлять новые поля, не нарушая существующих клиентов. Это довольно упрощенный пример, так как вы также захотите реализовать IExtensibleDataObject, и вы должны управлять версиями через пространства имен как на уровне контракта на обслуживание, так и на уровне контракта данных.
Я бы пошел с чем-то, что имело смысл, делая более вероятным, что люди признают это и используют это соответственно.
public ReportResultObject GetReportWithAdditionalInformation(...)
может быть немного слишком много, хотя!
Я бы конечно избежал GetReportV2
или похожие.
Создайте новый операционный договор и добавьте к нему пространство имен. Затем пусть ваши клиенты, использующие новый контракт, называют его через пространство имен. Это будет имитировать управление версиями.
Если ваш сервис WCF является RESTful, имеет ли значение, если bool includeAdditionalInformation
прошло или нет?