WCF Data Contract - лучший / самый чистый способ обеспечить соблюдение требуемых значений?

У меня есть контракт данных WCF с кучей свойств примитивных типов, таких как int и decimal, и DateTime (что, конечно, структура).

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

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

Так что вместо того, чтобы делать что-то вроде

[DataMember] 
public Nullable<int> AgencyID { get; set; }

который позволил бы мне чисто проверить на null на стороне службы, я бы сделал это:

[DataMember(IsRequired = true, EmitDefaultValue = true)] 
public int AgencyID { get; set; }

Насколько я понимаю, это вызовет исключение, если свойству не было присвоено значение или его значение по умолчанию равно 0, что является желаемым поведением. Является ли это наилучшей практикой для обеспечения обязательных свойств на стороне клиента? Есть ли какое-то преимущество в том, чтобы просто обнулить все и проверить вместо этого на стороне службы?

1 ответ

Решение

Я не думаю, что это хороший способ сделать их всех Nullable, потому что тогда клиент не будет знать по вашему контракту, что поле действительно требуется или нет.

Если вы подаете заявку IsRequired=true тогда обязательно указывать значение поля, иначе это вызовет исключение, но этот подход относительно лучше, чем Nullable...

Во многих сценариях я использовал DTO (объекты передачи данных) для разных служб... имея обязательные поля...

Другие вопросы по тегам