Nano Hash - криптовалюты, майнинг, программирование

Соглашения об именах WCF для расширения методов

У меня есть метод, представленный как OperationContract для моей службы WCF, который я хотел бы переработать. Предыдущий программист написал что-то вроде:

public ReportResultObject GetReport(string stringContainingParameters)

Я хотел бы иметь метод, который был бы похож на этот:

public ReportResultObject GetReport(int[] someIds, bool includeAdditionalInformation)

Поскольку WCF не позволяет использовать перегруженные методы без указания атрибута Name в OperationContract, и я не хочу нарушать работу текущих клиентов, существует ли соглашение об именах для подобных ситуаций? Что-то вроде GetReportV2 или GetReportHeyUseMeInstead?

22.05.2009

  • Что не так с атрибутом "Имя в контракте"? 22.05.2009
  • На самом деле ничего, кроме того, что я надеялся, что у программиста есть способ, независимо от того, выходят ли они из WSDL или просто используют метод ChannelFactory, чтобы иметь возможность отличать метод, используемый только в старых клиентах, и тот, который следует использовать в новых клиентах. 22.05.2009

Ответы:


1

Повторяя то же самое снова, вы просто настраиваете себя на тот же беспорядок, когда вам нужно добавить еще один параметр. Я настоятельно рекомендую вам подумать о единственном параметре, который является контрактом данных;

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, и вы должны управлять версиями через пространства имен как в служба и данные уровни контракта.

22.05.2009

2

Я бы выбрал что-то, что имело смысл, увеличивая вероятность того, что люди узнают это и будут использовать должным образом.

public ReportResultObject GetReportWithAdditionalInformation(...)

хотя может быть многовато!

Я бы, конечно, избегал GetReportV2 или чего-то подобного.

22.05.2009

3

Создайте новый операционный контракт и добавьте к нему пространство имен. Затем пусть ваши клиенты, использующие новый контракт, назовут его через пространство имен. Это будет имитировать управление версиями.

22.05.2009

4

Если ваша служба WCF является RESTful, имеет ли значение, передан bool includeAdditionalInformation или нет?

22.05.2009
  • В некоторых случаях он использует REST, но также будут использоваться все другие протоколы (tcp, ipc и ws HTTP). 22.05.2009
  • Новые материалы

    Кластеризация: более глубокий взгляд
    Кластеризация — это метод обучения без учителя, в котором мы пытаемся найти группы в наборе данных на основе некоторых известных или неизвестных свойств, которые могут существовать. Независимо от..

    Как написать эффективное резюме
    Предложения по дизайну и макету, чтобы представить себя профессионально Вам не позвонили на собеседование после того, как вы несколько раз подали заявку на работу своей мечты? У вас может..

    Частный метод Python: улучшение инкапсуляции и безопасности
    Введение Python — универсальный и мощный язык программирования, известный своей простотой и удобством использования. Одной из ключевых особенностей, отличающих Python от других языков, является..

    Как я автоматизирую тестирование с помощью Jest
    Шутка для победы, когда дело касается автоматизации тестирования Одной очень важной частью разработки программного обеспечения является автоматизация тестирования, поскольку она создает..

    Работа с векторными символическими архитектурами, часть 4 (искусственный интеллект)
    Hyperseed: неконтролируемое обучение с векторными символическими архитектурами (arXiv) Автор: Евгений Осипов , Сачин Кахавала , Диланта Хапутантри , Тимал Кемпития , Дасвин Де Сильва ,..

    Понимание расстояния Вассерштейна: мощная метрика в машинном обучении
    В обширной области машинного обучения часто возникает необходимость сравнивать и измерять различия между распределениями вероятностей. Традиционные метрики расстояния, такие как евклидово..

    Обеспечение масштабируемости LLM: облачный анализ с помощью AWS Fargate и Copilot
    В динамичной области искусственного интеллекта все большее распространение получают модели больших языков (LLM). Они жизненно важны для различных приложений, таких как интеллектуальные..