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