Я считаю, что мы смешиваем здесь 2 определения, которые не имеют отношения друг к другу.
DTO или Data Transfer Object - это шаблон проектирования, вы можете использовать его для передачи данных между слоями, а также они не имеют поведения. Мартин Фаулер очень хорошо объясняет это по адресу: http://www.martinfowler.com/eaaCatalog/dataTransferObject.html
В другой руке у нас есть POCO или Plain Old CLR Object. Но чтобы говорить о POCO, мы должны знать, с чего он начался, то есть POJO или Plain Old Java Object. Мартин Фаулер с двумя партнерами придумал этот термин, и он объясняет его здесь: http://www.martinfowler.com/bliki/POJO.html
Так что POCO могут иметь поведение и все, что вы хотите. Это те же самые общие классы, которые вы пишете в своей повседневной жизни, они просто дали им это имя, чтобы кратко и легко запомнить их.
В ответ на ваш второй вопрос, я думаю, что лучший подход, и я всегда обращаюсь к нему, это отправка DTO из уровня Busines на все, что его использует (например: ваши сервисы, веб-сайт, настольное приложение, мобильное приложение и т. Д.) .). Это связано с тем, что в большинстве случаев они не имеют поведения и не только свойств, поэтому они легковесны и идеально подходят для использования в службах, и, конечно, они не раскрывают конфиденциальные данные вашего бизнеса.
При этом, если вы планируете использовать DTO, я могу порекомендовать вам скачать EntitiesToDTOs, Entity Framework DTO Generator, который я недавно опубликовал в CodePlex, он бесплатный и с открытым исходным кодом. Перейти к http://entitiestodtos.codeplex.com