powered by simpleCommunicator - 2.0.50     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF + Repository + DI
20 сообщений из 45, страница 2 из 2
EF + Repository + DI
    #38900058
Фотография Axeleron
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttAxeleronhVostt,

А разве большая разница веб или не веб? Там по-моему вообще один фиг разница, на UI не это завязано. А цикл жизни объекта определается вне зависимости от этого.

Так к чему привязывать, если нет Http-запросов?

К событиям?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900063
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КЗависит от архитектуры. Например, если это веб-приложение, то удобно привязывать время жизни сервисов и DbContext к http-запросу.

Но об этом уже было сказано.

А если не веб?С WCF-ным сервером тоже самое. А если десктоп, то сейчас придёт МСУ и скажет, что двухзвенка - зло!

Но можно попробовать врукопашную управлять областями контейнера , может даже привязать это к событиям десктопного приложения вроде Idle.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900072
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronhVosttпропущено...


Так к чему привязывать, если нет Http-запросов?

К событиям?При асинхронном взаимодействием десктопного приложения с сервером, что в наше время считается "хорошим тоном", это может оказаться не так просто.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900109
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AxeleronК событиям?

Скорее, к действиям пользователя, тогда когда есть определённая операция с данными.

Алексей КС WCF-ным сервером тоже самое. А если десктоп, то сейчас придёт МСУ и скажет, что двухзвенка - зло!

Не-не, рассматривается 2-х звенка, а не зло там она или не зло ))

Алексей КНо можно попробовать врукопашную управлять областями контейнера , может даже привязать это к событиям десктопного приложения вроде Idle.

Ну вот об этом и речь, в http вся понятно, железно привязываться к запросу, это логично, удобно и понятно. А к чему привязывать lifetime scope без контекста запроса?

Алексей КПри асинхронном взаимодействием десктопного приложения с сервером, что в наше время считается "хорошим тоном", это может оказаться не так просто.

Ну это разные потоки, не проблема, пока хотя бы для одного клиента.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900143
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt,

Ну как-то так для асинхронного:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
static class ScopeFactory
{
    // ...
}

//...

async void button_click(object sender, EventArgs e)
{
    using(var s = ScopeFactory.GetScope())
    {
        await s.Resolve<IMyService>().Execute();
    }
}

В WPF, возможно, прикладной код можно упростить выносом получения области на уровень реализации ICommand.

Повторюсь, при синхронном выполнении в UI-потоке можно попробовать привязать уничтожение области к событию Idle, но я бы не стал устраивать такие ограничения.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900487
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей КЗависит от архитектуры. Например, если это веб-приложение, то удобно привязывать время жизни сервисов и DbContext к http-запросу.

Но об этом уже было сказано.

А если не веб?К потоку.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900641
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttпропущено...


А если не веб?К потоку.К какому? При продолжении через I/O Completion Port потоков много.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900666
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей КskyANAпропущено...
К потоку.К какому? При продолжении через I/O Completion Port потоков много.

Видимо имеется в виду основной поток приложения.

Пока не вижу смысла стыковаться к потоку. В зависимости от задачи, время жизни сервиса для выполнения некоего действия (бизнес-операции) должно быть сопоставимо с началом и окончанием этой операции.

Допустим, открываем большую форму редактирования, для всей формы создаётся контекст, в рамках которого живут полученные сервисы. При сохранении выполняется пакетное сохранение данных контекста, при отмене контекст просто убивается и всё.

Я делал так, но и приложения для десктопа не были достаточно сложными, применялись те же принципы, что и в веб, только вместо веб-запроса использовалась концепция операции (связанная, обычно, с командой). Т.е. контекст долго не жил. Там, где требовались табличные данные (гриды, деревья, списки), использовалось кеширование с подкачкой данных через создаваемый для этих целей контектс.

Под контекстом имеется в виду не DbContext, а абстракция типа HttpContext-а, только для бизнес-операции, контекст создавался со своим life time scope, умервщлялся убийством scope вместе со всеми своими зависимостями. Сложная операция может порождать подконтексты по тому же принципу.

От большого контекста на поток отказался сразу. Всё, что жило в памяти, это кеш и оперативные данные (на самом деле просто живущие как синглетоны в контейнере).
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900688
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttАлексей Кпропущено...
К какому? При продолжении через I/O Completion Port потоков много.

Видимо имеется в виду основной поток приложения.

Пока не вижу смысла стыковаться к потоку. В зависимости от задачи, время жизни сервиса для выполнения некоего действия (бизнес-операции) должно быть сопоставимо с началом и окончанием этой операции.

Допустим, открываем большую форму редактирования, для всей формы создаётся контекст, в рамках которого живут полученные сервисы. При сохранении выполняется пакетное сохранение данных контекста, при отмене контекст просто убивается и всё.

Я делал так, но и приложения для десктопа не были достаточно сложными, применялись те же принципы, что и в веб, только вместо веб-запроса использовалась концепция операции (связанная, обычно, с командой). Т.е. контекст долго не жил. Там, где требовались табличные данные (гриды, деревья, списки), использовалось кеширование с подкачкой данных через создаваемый для этих целей контектс.

Под контекстом имеется в виду не DbContext, а абстракция типа HttpContext-а, только для бизнес-операции, контекст создавался со своим life time scope, умервщлялся убийством scope вместе со всеми своими зависимостями. Сложная операция может порождать подконтексты по тому же принципу.

От большого контекста на поток отказался сразу. Всё, что жило в памяти, это кеш и оперативные данные (на самом деле просто живущие как синглетоны в контейнере).на примере StructureMap: http://docs.structuremap.net/Scoping.htm

Имелись в виду пункты 6 и 3.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900705
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttприменялись те же принципы, что и в вебВ веб же какой основной принцип? Выполнил команду, закрой соединение и верни его в пул, т.к. в большинстве случаев все работают под одной учёткой, в одном application domain, в одном процессе.

В десктопе же у пользователя свой личный пул и играть с ним в пинг-понг не имеет особого смысла.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900770
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVosttприменялись те же принципы, что и в вебВ веб же какой основной принцип? Выполнил команду, закрой соединение и верни его в пул, т.к. в большинстве случаев все работают под одной учёткой, в одном application domain, в одном процессе.

В десктопе же у пользователя свой личный пул и играть с ним в пинг-понг не имеет особого смысла.

А ещё есть мысли кроме идеи «десктоп это не веб»?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38900816
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAпропущено...
В веб же какой основной принцип? Выполнил команду, закрой соединение и верни его в пул, т.к. в большинстве случаев все работают под одной учёткой, в одном application domain, в одном процессе.

В десктопе же у пользователя свой личный пул и играть с ним в пинг-понг не имеет особого смысла.

А ещё есть мысли кроме идеи «десктоп это не веб»?Мысли насчёт чего? Вот ты ещё какие "принципы, что и в веб" можешь озвучить и на чём они основаны?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38901460
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAМысли насчёт чего? Вот ты ещё какие "принципы, что и в веб" можешь озвучить и на чём они основаны?

Я же озвучил, в веб удобно ограничивать конекст http запросом потому, что обычно запрос является атомарной операцией, приложение строится на этом принципе, если конечно не удерживать состояние на сервере.

У десктопного приложения есть основной поток, и он является единственным основным потоком до момента закрытия приложения. Привязываемся к этому потоку? По сути это значит, делать контекст синглетоном, и всё тут. Или ты имел в виду что-то другое?
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38901643
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAМысли насчёт чего? Вот ты ещё какие "принципы, что и в веб" можешь озвучить и на чём они основаны?

Я же озвучил, в веб удобно ограничивать конекст http запросом потому, что обычно запрос является атомарной операцией, приложение строится на этом принципе, если конечно не удерживать состояние на сервере.

У десктопного приложения есть основной поток, и он является единственным основным потоком до момента закрытия приложения. Привязываемся к этому потоку? По сути это значит, делать контекст синглетоном, и всё тут. Или ты имел в виду что-то другое?Насчёт DbContext не скажу (с EF не работал), а вот держать открытое соединение (DbConnection) - это вполне себе нормально.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38901749
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНасчёт DbContext не скажу (с EF не работал), а вот держать открытое соединение (DbConnection) - это вполне себе нормально.

Соединение это совсем другое. EF DbContext эт чистый UOW практически, исходя из этого я спрашивал, есть ли другие широко известные способы работы с ним.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38903282
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAНасчёт DbContext не скажу (с EF не работал), а вот держать открытое соединение (DbConnection) - это вполне себе нормально.

Соединение это совсем другое. EF DbContext эт чистый UOW практически, исходя из этого я спрашивал, есть ли другие широко известные способы работы с ним.Хорошо, давай разбираться.

UoW нужен для того, чтобы отслеживать действия над объектами (создание, изменение, удаление) и выполнять соответсвующие запросы (INSERT, UPDATE, DELETE) во время Commit (или Flush, или что там в EF).

В ADO.NET он реализован где? Правильно, в DataSet. И вот тебе самый, что ни на есть "широко известные способы работы с ним" :)

Также UoW тесно связан с бизнес-транзакциями, это да. Но не обязательно одна бизнесс-транзакция == один объект, реализующий UoW.
На том же DataSet можно показать, что выполнили пачку каких-то действий, вызвали DataAdapter.Update(DataSet dataSet) и DataSet.AcceptChanges() .
И продолжаем работать дальше.

И в случае NHibernate сделали Flush и продолжаем работать дальше.
И в EF думаю можно также.

Ну и lifecycle сервиса != lifecycle UoW.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38903285
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttДопустим, открываем большую форму редактирования, для всей формы создаётся контекст, в рамках которого живут полученные сервисы. При сохранении выполняется пакетное сохранение данных контекста, при отмене контекст просто убивается и всё.Вот тут надо задуматься, а выполнит ли контейнер Release сразу при закрытии формы.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38903385
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТакже UoW тесно связан с бизнес-транзакциями, это да. Но не обязательно одна бизнесс-транзакция == один объект, реализующий UoW.

Вообще-то говоря, желательно, так как в рамках одного объекта, реализующего UoW отслеживаются все изменения и взаимосвязи данных, коммит сохраняет полное состояние операции. Если объектов будет больше, теоретически может возникнуть несогласованное состояние.

skyANAВ ADO.NET он реализован где? Правильно, в DataSet. И вот тебе самый, что ни на есть "широко известные способы работы с ним" :)

Я бы с натяжечкой DataSet включал в ADO.NET ) Скорее, это средство работы с ним.

skyANAИ в случае NHibernate сделали Flush и продолжаем работать дальше.
И в EF думаю можно также.

Ну и lifecycle сервиса != lifecycle UoW.

В общем, да. Но что происходит в NHibernate, если Flush выполнить не удалось? База данных не пропустила.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38903388
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВот тут надо задуматься, а выполнит ли контейнер Release сразу при закрытии формы.

Честно говоря без разницы, сразу будет Release или чуть позже, это ни на что не влияет, так как мы выходим из scope.
...
Рейтинг: 0 / 0
EF + Repository + DI
    #38903722
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANAТакже UoW тесно связан с бизнес-транзакциями, это да. Но не обязательно одна бизнесс-транзакция == один объект, реализующий UoW.

Вообще-то говоря, желательно, так как в рамках одного объекта, реализующего UoW отслеживаются все изменения и взаимосвязи данных, коммит сохраняет полное состояние операции. Если объектов будет больше, теоретически может возникнуть несогласованное состояние.Я не верно выразился. Надо читать так: не обязательно одна бизнесс-транзакция == новый объект, реализующий UoW :)
...
Рейтинг: 0 / 0
20 сообщений из 45, страница 2 из 2
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / EF + Repository + DI
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]