Мы начинаем новый веб-продукт, на котором мы планируем разоблачить нашу бизнес-логику через службы WCF. Мы будем использовать ASP.NET 4.0, С#, EF 4.0. В будущем мы хотим создать приложения iphone и приложения WPF на основе сервисов. Я много читал об использовании POCO vs Self Tracking Entities (STE), и я понимаю, что STE не работают с веб-сценарием. Может ли кто-нибудь пролить свет на эту проблему?
Объекты самоконтроля и объекты POCO
Ответ 1
Для меня STE - абсолютно неправильная концепция. Это просто еще одна реализация DataSet.
- В приложении ASP.NET вам нужно будет хранить STE где-то среди запросов. В первом запросе вы запросите свой источник данных, чтобы получить STE и предоставить данные на странице. В следующем запросе (postback) вы захотите изменить STE с возвращенными данными из браузера. Для поддержки отслеживания вам придется использовать тот же STE, что и в первом запросе = > вам нужно будет хранить STE в viewstate (если вы хотите использовать ASP.NET WebForms) или сеанс.
- STE бесполезна для SOA или совместимости. Логика отслеживания является частью STE = она работает на клиенте. Если вы обнаружите STE в сервисе, вы сразу же ожидаете, что клиентская сторона будет использовать те же функции отслеживания, которые включены в логику STE. Но эти функции автоматически не предоставляются другой стороне. В .NET у вас есть они, потому что вы делитесь сборкой с STE. Но на другой платформе вы должны объяснить разработчикам, как реализовать логику STE, чтобы заставить ее работать на вашей стороне. Это будет, вероятно, наиболее ограничивающим для вас случаем из-за приложения iPhone.
Ответ 2
Self Tracking Entities прекрасно работают в среде MVC с сценарием WCF. Я участвовал в двух проектах, использующих их (один в производстве, один почти).
С помощью POCOs вы потеряете отслеживание изменений по проводу, что создает большую дополнительную боль, потому что EF теперь нуждается в повторном запросе информации о состоянии. Если вы используете EF и WCF STE, решите много проблем и сделайте весь ваш упорный конвейер действительно гладким.
Можете ли вы предоставить цитату для этого заявления? "STE не работают с веб-сценарием"
Ответ 3
Обратитесь к http://msdn.microsoft.com/en-us/data/jj613924.aspx, поскольку STE больше не рекомендуется! Корпорация Майкрософт рекомендует использовать любой из ASP.NET Web API, WCF Data Services или Entity Framework API (сложные операционные системы)
Ответ 4
Если эта услуга будет потребляться любым приложением, у вас нет прямого контроля, вы, вероятно, должны серьезно подумать о том, чтобы развестись с EF (или nHibernate или Linq2Sql или любым другим решением управления постоянством данных) с ваших сервисов и ваши объекты передачи данных. Это изолирует внутренние изменения от взлома клиентов. Нарушение клиентов, как правило, плохо.