Обычно, если вы собираетесь возвращать данные из службы, вам нужно вернуть класс, предназначенный для этой цели службы, содержащей то, что подходит для этого служебного вызова, DTO (объект передачи данных) или DataContract в мире WCF.
Одним из инструментов, который особенно полезен для отображения между объектами и DTO, является AutoMapper. Если вы используете AutoMapper или просто «левое правое» кодирование, это предотвратит ленивую проблему с загрузкой/задержкой выполнения, поскольку выполнение сопоставления вызовет выполнение.
Есть целый ряд причин, почему это не может быть хорошей идеей, чтобы вернуть объект из службы, вот несколько (есть разные мнения по большей части это)
- В зависимости от вашей настойчивости (в вашем случае nhib) у вас может быть поведение (замедленное выполнение) или состояние, прикрепленное к вашим объектам, которые не будут выполняться правильно в другом приложении или сервере
- Возвращающийся объект приводит к уровню обслуживания, который часто приводит к вызовам, которые являются очень CRUD- например, приводит к очень чатовому уровню обслуживания и очень un-SOA
- Различные вызовы могут потребовать больше или меньше данных, чем то, что является сущностью, DTO дает вам возможность завершать именно то, что вам нужно, и ничего не делает.
- Если вы пытаетесь создать многоразовый сервисный уровень, вы не должны предполагать, что ваши клиенты имеют доступ к вашей логике сущности или домена, отличной от того, что находится в вашем сервисе. они могут быть написаны в другом приложении, на другом языке и т. д. Если ваши объекты - это то, что вы используете для перемещения данных, вы будете склонны забывать об этом.
Только что понял, сколько лет этот вопрос. Ой, хорошо. – Brook
Честно говоря, это было полезно для меня сегодня. :) – Mayo