WCF DataContracts и базовые структуры данных

Указатель NULL - это тот, который указывает на никуда. Когда вы разыскиваете указатель p, вы говорите «дайте мне данные в месте, хранящемся в« p ». Когда p является нулевым указателем, местоположение, хранящееся в p, является nowhere, вы говорите «Дайте мне данные в месте« нигде ». Очевидно, он не может этого сделать, поэтому он выбрасывает NULL pointer exception.

В общем, это потому, что что-то не было правильно инициализировано.

13
задан Mikev 2 April 2019 в 20:15
поделиться

3 ответа

В целом я думаю с точки зрения лучших практик, Вы не должны представлять структуру своих бизнес-объектов, поскольку данные сокращаются, а скорее определите "данные определенные для контракта" классы и преобразуйте Бизнес для Заключения контракта. Это может потребовать дополнительной работы, но от разделения проблем и защиты от точки зрения изменения дополнительная работа, вероятно, стоит того.

шаблоны Microsoft & методы "Сервисный Выпуск Моделирования Фабрики" реализации это, и также обеспечивают инструменты, чтобы автоматически сгенерировать Бизнес < => классы преобразователя Контракта - это - превосходное дополнение VS и также представляет лучшие практики Microsoft для WCF.

12
ответ дан 1 December 2019 в 23:33
поделиться

Я обычно не представляю свои объекты бизнеса/данных через провод, так как мне нравится придерживаться единственного принципа ответственности (srp). Для объяснения объекты данных были созданы для отображения на базовое реляционное (дб) модели. Так единственная причина они должны "измениться", из-за изменения в реляционной модели, вот именно.

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

4
ответ дан 1 December 2019 в 23:33
поделиться

Просто добавлю к приведенным выше ответам: Объект, который предоставляет веб-сервис, называется объектом передачи данных (DTO). Наличие DTO для сопоставления вашего объекта Business Entity (BEO) - это хорошо, потому что он обеспечивает разделение между вашим веб-сервисом и фактической реализацией / логикой, лежащей в основе веб-сервиса.

Наконец, вот как можно украсить DTO так, чтобы, когда он предоставляется WSDL, имена отражали фактические объекты, которые он представляет (вместо objectNameDTO или чего-то подобного).

//Business Entity
class Person
{
   public string Name{ get; set; }
   public int Age{ get; set; }
}


//Data transfer object
[DataContract(Name="Person")] //<-- this is what makes the WSDL look nice and clean
class PersonDTO
{
   [DataMember(Name = "Name", Order = 0)]
   public string Name{ get; set; }
   [DataMember(Name = "Age", Order = 1)]
   public int Age{ get; set; }
}
1
ответ дан 1 December 2019 в 23:33
поделиться
Другие вопросы по тегам:

Похожие вопросы: