|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
Пишу небольшое приложение по получению данных о товарах с сайта поставщика, с БД работаю посредством EF. Возникла идея использовать один раз созданный объект контекста данных на все приложение, но предследует непримиримый внутренний конфликт, чем то такой подход будет плох, разъясните пожалуйста почему так делать нельзя или почему все таки такая реализация приемлема. Заранее благодарен! ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 16:02 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
xpoft2010, на все приложения, или на всё приложение? И что преследует эта цель? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 16:20 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
На ВСЁ приложение, по сути хочу использовать паттерн - одиночка. Цель преследуется следующая: Имеется некий класс который выполняет получение данных с сайта о товаре, далее эти данные необходимо сохранить в БД (предварительно некоторые данные необходимо удалить из БД), естественно все операции должны выполняться в одной транзацкии. Сама идеология класса такова, что контекст передавать в него непосредственно было бы неправильно - его суть заключается в том, чтобы получить данные с сайта и с помощью парсера - распарсить, далее через класс Адаптер товара - изменить св-ва самого товара. На самом деле контекст потребуется как раз в классе Адаптера товара, а как следствие передавать объект контекста данных еще глубже по цепочке - совсем плохой подход. Отсюда и появилась идея использовать единый один раз созданный контекст во всем приложении. PS: Пока писал, понял, что имеются в моей архитектуре некоторые изъяны, но тем не менее вопрос остается открытым: "Чем плох подход использовать одиночку?" ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 16:39 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
xpoft2010, да нет проблем, получайте данные , кешируйте, работайте изменяйте сохраняйте, ничего тут плохого нет, пользователь ведь один, какие проблемы, данные всегда достоверны, вполне разумно.. ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 16:56 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
Спасибо за ответ! А если использовать подобный подход в каком либо бизнес приложении обладающем гораздо более широким функционалом, чем в приведенном примере? ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 17:13 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
xpoft2010Спасибо за ответ! А если использовать подобный подход в каком либо бизнес приложении обладающем гораздо более широким функционалом, чем в приведенном примере? скорее не функционалом, осмелюсь Вас поправить, многопользовательской средой на изменения данных в базе. то есть изменения может делать много людей в одно и тоже время. Ничего тут ущербного нет многие орм используют механизм кеширования, да же многоуровневое, для сесии - как единицы работы с данными так и уровень глобальный для всего приложения второй уровень, ну это как бы я считаю не основная а добавочная опция орм, кеш второго уровня можно отменить, в первом уровне получать с базы, мима кеша, основная проблема,это достоверность данных,( ты изменяешь запись, а ее уже нет,- удалил другой пользователь, ну и тут есть много механизмов ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 17:52 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
Аа, т.е. сам подход имеет право на жизнь, и вся дилемма сводится к актуальности закешированных данных! Спасибо огромное! :) ... |
|||
:
Нравится:
Не нравится:
|
|||
25.11.2012, 18:11 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
xpoft2010, подозреваю, что в EF DataContext, как и сессия в хибере, ни разу не потокобезопасный. Поэтому в случае многопользовательского доступа накушаетесь неприятностей. И вообще, такие объекты тратят ресурсы (подключения, транзакции и т.д.). Поэтому их должна быть короткой. ... |
|||
:
Нравится:
Не нравится:
|
|||
26.11.2012, 11:16 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
У меня вопрос сходный с вопросом ТС. Программирую CodeFirst, DbContext ограничен пределами единицы работы, и соответственно в классе UnitOfWork и создается. UI - Windows Forms. Единица работы небольшая и обычно обслуживает один раздел (например все сущности, связанные с классом Person) UnitOfWork создается в в форме родителе) и передается в конструкторы дочерних форм (обычно 3-7 форм) при их вызове. Время жизни UnitOfWork (и соответственно dbcontext) на данный момент ограниченно временем жизни формы-родителя, обслуживающей единицу работы. Правилен ли такой подход? Стоит ли заморачиваться с отдельным экземпляром UoW для каждой формы и передачей графов объектов? Либо наоборот укрупнить контекст и забыть про синхронизацию контекстов? ... |
|||
:
Нравится:
Не нравится:
|
|||
03.12.2012, 12:43 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
Vertigo02У меня вопрос сходный с вопросом ТС. Программирую CodeFirst, DbContext ограничен пределами единицы работы, и соответственно в классе UnitOfWork и создается. UI - Windows Forms. Единица работы небольшая и обычно обслуживает один раздел (например все сущности, связанные с классом Person) UnitOfWork создается в в форме родителе) и передается в конструкторы дочерних форм (обычно 3-7 форм) при их вызове. Время жизни UnitOfWork (и соответственно dbcontext) на данный момент ограниченно временем жизни формы-родителя, обслуживающей единицу работы. Правилен ли такой подход? Стоит ли заморачиваться с отдельным экземпляром UoW для каждой формы и передачей графов объектов? Либо наоборот укрупнить контекст и забыть про синхронизацию контекстов? нет создавай dbcontext, когда непросредственно читаешь или записываешь данные, в промежутке между этими действиями он нах не нужет, то же относится и к ТС ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 09:40 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
Vertigo02UnitOfWork создается в в форме родителе) и передается в конструкторы дочерних форм (обычно 3-7 форм) при их вызове. Время жизни UnitOfWork (и соответственно dbcontext) на данный момент ограниченно временем жизни формы-родителя, обслуживающей единицу работы. Вот это примерно то, что надо. Контекст живёт только на время выполнения работы, потом закрывается. ... |
|||
:
Нравится:
Не нравится:
|
|||
04.12.2012, 10:33 |
|
Один объект Контекста данных на все приложение
|
|||
---|---|---|---|
#18+
xpoft2010, Context не потокобезопасен, поэтому такие штуки я бы не посоветовал. Много читал информации на эту тему - создание контекса легкая операция, поэтому не вижу смысла держать его одного. ... |
|||
:
Нравится:
Не нравится:
|
|||
05.12.2012, 12:39 |
|
|
start [/forum/topic.php?fid=17&fpage=29&tid=1350165]: |
0ms |
get settings: |
10ms |
get forum list: |
14ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
45ms |
get topic data: |
12ms |
get forum data: |
2ms |
get page messages: |
45ms |
get tp. blocked users: |
2ms |
others: | 11ms |
total: | 149ms |
0 / 0 |