powered by simpleCommunicator - 2.0.51     © 2025 Programmizd 02
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача data context по иерархии конструкторов - надо, нет?
55 сообщений из 55, показаны все 3 страниц
Передача data context по иерархии конструкторов - надо, нет?
    #38406335
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Создаю я модель сложную - в этом участвуют несколько конструкторов. Коллеции ей заполняю, поля. Что лучше, создать один data context и передавать его вниз по конструкторам составляющих объектов, или в каждом конструторе свой контекст создавать?

Для простого примера, от балды накидал код:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
public class A
{
	B b;
	ICollection<C> cc;

	public A()
	{
		DBContext db = new DBContext();
		b = new B();
		cc = db.CC.Select(c => new C(c)
	}
}

public class B 
{  
	int ib;
	
	public B()
	{
		DBContext db = new DBContext();
		ib = db.II.First();
	}
}

public class C 
{  
	int ic;
	
	public C(CC c)
	{
		DBContext db = new DBContext();
		ic = db.ZZ
			.Where(z => z.x == c.x)
			.FirstOrDefault();
	}
}



Так вот, лучше так, как в коде, или лучше в самом верхнем по вызову конструкторе создать один раз и передавать через параметр в конструкторы ниже по иерархии вызовов?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406341
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Так в конструкторе класса С ошибка, но пофиг - главное, я про констекст спрашиваю.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406352
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Советуют поменьше давать жить контексту. Буквально, по контексту на транзакцию. Я желание есть, чтобы раз создать контекст при старте приложения и удалять его только при закрывании приложения.

Я вот что думаю. Если приложение работает с локальной БД, только для одного юзера, то можно, пожалуй, и один контекст на всё приложение шарить. А если много юзеров и серверная БД - уже чем меньше контекст живёт, тем лучше (тем меньше вероятность конкуренций и связанными с ней накладными расходами). Я правильно думаю?

Но вот в данном конрктеном случае, при каскаде инициализаций, достаточно же вроде одного контекста, который лучше передавать в параметрах конктрукторов?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406367
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое "модель сложная" и на фига ей какой-то контекст?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406548
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAЧто такое "модель сложная" и на фига ей какой-то контекст?
Я под этим подразумеваю, что её поля (модель - это класс) состоят из других типов, из коллекций этих типов и т. д. И при инициализации экземпляра модели сначала происходит инициализация экземпляров составляющих её типов, а затем её самой (это я назвал каскадной инициализацией). И каждый такой экземпляр инициализируется данными из БД. Эти данные берутся не прямо из БД, а череp энтитифреймворковское ORM, с которым я общаюсь через контекст данных (DBContext). Этот контекст - "типа БД", только в виде кода. Т. е. я работаю не с БД, а с контекстом. И вот я спрашиваю, один контекст создавать на такие каскадные инициализации (и, соответстввенно, передавать его в конструкторы составляющих типов), или создавать свои контексты по месту каждой конкретной инициализации?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406549
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406581
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Имхо, тут все зависит от приложения, если данные получаются только для чтения, с натяжкой почему бы нет, будет работать и жить с экземпляром, но если подразумевается модификация данных в экземплярах классов, тут может возникнуть неразбериха
так как контекст это же и кеш первого уровня и замыкатель единицы работы ( грязный или чистый объект), имхо для этого дела
держать одни контекст а классы создавать через фабрику di/ioc, а концы контекста выкинуть через интерфейс типов создаваемых
или изолировать его через прокси методы.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406623
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAЧто такое "модель сложная" и на фига ей какой-то контекст?
Я под этим подразумеваю, что её поля (модель - это класс) состоят из других типов, из коллекций этих типов и т. д. И при инициализации экземпляра модели сначала происходит инициализация экземпляров составляющих её типов, а затем её самой (это я назвал каскадной инициализацией). И каждый такой экземпляр инициализируется данными из БД. Эти данные берутся не прямо из БД, а череp энтитифреймворковское ORM, с которым я общаюсь через контекст данных (DBContext). Этот контекст - "типа БД", только в виде кода. Т. е. я работаю не с БД, а с контекстом. И вот я спрашиваю, один контекст создавать на такие каскадные инициализации (и, соответстввенно, передавать его в конструкторы составляющих типов), или создавать свои контексты по месту каждой конкретной инициализации?Какой-то ActiveRecord на базе EF получается. ИМХО редко, кто сейчас так в .NET делает.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406625
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406630
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Я под этим подразумеваю, что её поля (модель - это класс) состоят из других типов, из коллекций этих типов и т. д. И при инициализации экземпляра модели сначала происходит инициализация экземпляров составляющих её типов, а затем её самой (это я назвал каскадной инициализацией). И каждый такой экземпляр инициализируется данными из БД. Эти данные берутся не прямо из БД, а череp энтитифреймворковское ORM, с которым я общаюсь через контекст данных (DBContext). Этот контекст - "типа БД", только в виде кода. Т. е. я работаю не с БД, а с контекстом. И вот я спрашиваю, один контекст создавать на такие каскадные инициализации (и, соответстввенно, передавать его в конструкторы составляющих типов), или создавать свои контексты по месту каждой конкретной инициализации?Какой-то ActiveRecord на базе EF получается. ИМХО редко, кто сейчас так в .NET делает.
Почему ActiveRecord-то? У меня данные только считываются, но не обновляются (поэтому мне, кстати, лучше там выше, в коде, использоваться РидОнлиКоллекшн... ну да ладно). Я это, кстати, забыл упомянуть - не думал, что это важно.

Где-то в степиuser7320,
Имхо, тут все зависит от приложения, если данные получаются только для чтения, с натяжкой почему бы нет, будет работать и жить с экземпляром, но если подразумевается модификация данных в экземплярах классов, тут может возникнуть неразбериха
так как контекст это же и кеш первого уровня и замыкатель единицы работы ( грязный или чистый объект), имхо для этого дела
держать одни контекст а классы создавать через фабрику di/ioc, а концы контекста выкинуть через интерфейс типов создаваемых
или изолировать его через прокси методы.
Я тут репозиторий и единицу работы даже не это самое... не делаю. А данные да - только для чтения. Я просто формирую большую сложную модель, чтобы потом в представлении (ASP.NET MVC) раскидать её поля по разным местам.




Я вообще про сам принцип - в таком варианте, когда чтобы инициализировать класс, надо инициализировать сначала другие классы, которые от включает в себя в качестве полей, лучше пользоваться одним контекстом и передавать его по цепочке инициализаций, чем на каждом этапе инициализации создавать свой контекст? Это же кажется разумным? А если будет куча контекстов - во-первых, для чего? А во-вторых - даже если надо будет модификацию данных делать, то при многих контекстах внутри одного сложного объекта как раз и могут возникнуть всякие проблемы и неразберихи. Например, синхронизация одновременно существующих нескольких контекстов, каждый из которых содержит изменения своей части сложного объекта. Вот тогда-то и нужны единицы работы и репозиторий, а так-то, когда просто чтение - чего заморачиваться. Да?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406639
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, переходим по Вашей же ссылке и читаем:some general guidelines when deciding on the lifetime of the context - When working with Web applications, use a context instance per request
Если не хотите заморачиваться, то создайте контекст, засуньте его в HttpContext.Current.Items и используйте. Когда вдруг понадобиться использовать классы модели в другом месте, тогда и перепишете.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406646
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320 The primary class that is responsible for interacting with data as objects is System.Data.Entity.DbContext (often referred to as context). Разобрались?
А, кстати, да. Что-то забыл - там внизу рекомендации. Ну, как я и думал - нефиг для атомарных операций по контексту создавать - слишком жирно и не зачем. Собственно, создание такого сложного объекта, что я выше описал, и есть один запрос, после которого я отдаю через контроллер этот объект в представление и всё - контекст можно убивать.

Можно считать, что разобрался.

Тогда мой код выше должен выглядеть так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
public class A
{
    B b;
    IReadOnlyCollection<C> cc;

    public A()
    {
        using(DBContext db = new DBContext())
        {        
            b = new B(db);
            cc = new ReadOnlyCollection(
                db.CC
                    .Select(c => new C(db, c))
                    .ToList());
        }
    }
}

public class B 
{  
    int ib;
    
    public B(DBContext db)
    {
        ib = db.II.First();
    }
}

public class C 
{  
    int ic;
    
    public C(DBContext db, CC c)
    {
        ic = db.ZZ
            .Where(z => z.x == c.x)
            .FirstOrDefault().y;
    }
}
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406655
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, да для на фига тут вообще какие-то свои классы и контексты? Храните свой сложный объект в MongoDB и отдавайте как BsonDocument прямиком в представление.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406675
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320, да для на фига тут вообще какие-то свои классы и контексты? Храните свой сложный объект в MongoDB и отдавайте как BsonDocument прямиком в представление.
Я кроме СКЛ Сервера ничего не знаю и пока (пока!) знать не хочу. У меня ещё голова не выросла, чтобы столько вмещать. Да и это не относится к теме вопроса - я же не спрашиваю, какая вообще СУБД лучше, а спрашиваю, какой вариант при имеющихся вводных лучше.

Кстати, не нашёл в Википедии (как русской, так и английской) отрицательных сторон подхода MongoDB. А из жизненного опыта известно, что если что-то не имеет отрицательных сторон (является этакой серебряной пулей), то очень скоро полностью все должны перейте на это. Но я что-то не вижу засилье MongoDB. И это в наш-то век связей и мгновенной передачи новостей ("Э, слыш, Вась, а Монго-то круче всех! Бросай этот Скул Сервер нафиг!").
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406678
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
не нравится
1 тяжелая инициализация в конструкторе , гораздо прагматичней инициализация по требованию
2 куча запросов бомбит сервер имхо не осмысленно.
проще сделать наследование c:ZZ и вытащить все одним джойном,( ну тут надо смотреть структуру)
3 не желание применять фабрику и инжекции
Да и вообще все не нравится вплоть до названий полей и классов
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406739
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Да и это не относится к теме вопроса - я же не спрашиваю, какая вообще СУБД лучше, а спрашиваю, какой вариант при имеющихся вводных лучше.Изначально вводных почти и не было. Только теперь понятно, что это веб и только чтение.

Я бы использовал Dapper ( performance of SELECT mapping ), и уж точно бы не стал так жёстко связывать модель с DBContext.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406763
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все зависит от того, что собой представляет твой контекст и какой тип приложения. Если у тебя в контексте пара свойств и пара коллекций и приложение ASP.NET, то генерить контекст на каждом чихе юзера в принципе нормальная практика. Если у тебя толстый клиент и в контексте пол сотни коллекций с сущностями из БД, то генерить такой контекст на каждом чихе юзера мягко говоря не рационально. Плюс если например у тебя WPF или Silverlight,
то постоянная генерация контекста сводит на нет весь смысл механизма привязок. Поэтому в таких случаях создаем на старте один контекст в котором
периодически обновляем данные из БД или от куда-то еще.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406768
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIв котором периодически обновляем данные из БД или от куда-то еще.А откуда ещё EF может "обновлять данные"?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406799
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAEDUARD SAPOTSKIв котором периодически обновляем данные из БД или от куда-то еще.А откуда ещё EF может "обновлять данные"?
А где ТС про EF говорил?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406821
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAпропущено...
А откуда ещё EF может "обновлять данные"?
А где ТС про EF говорил? 14879525
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406825
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, а Вы что под контекстом понимаете в своём посте выше?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406842
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAа Вы что под контекстом понимаете в своём посте выше?
Честно говоря так до конца и не понял что ТС имеет ввиду под контекстом, хоть и перечитал его пост три раза, в моем понимании контекст это набор бизнес-сущностей которыми оперирует приложение. Браться они могут из БД, из веб-сервисов, хоть из текстового файла, не суть...
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406849
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320Да и это не относится к теме вопроса - я же не спрашиваю, какая вообще СУБД лучше, а спрашиваю, какой вариант при имеющихся вводных лучше.Изначально вводных почти и не было. Только теперь понятно, что это веб и только чтение.

Я бы использовал Dapper ( performance of SELECT mapping ), и уж точно бы не стал так жёстко связывать модель с DBContext.
Нет, это опять советы с выходом из обсуждаемой темы, с предложением сторонних средств. Я за производительностью сейчас не гонюсь. Вот Где-то в степи правильно начал говорить - по сути.


EDUARD SAPOTSKI,
вы так говорите, будто мой контекст уже содержит в себе все данные БД. На сколько я знаю, поначалу он вообще как бы пустой и содержит в себе в основном "схему БД" в терминах языка программирования (классы там и прочее). Думаю, даже если генерить такую схему, отображающую полсотни таблиц, на каждом чихе, затраты не будут большими. Если я не гонюсь за оптимизациями, то и так сойдёт. В конце концов, на первом месте стоит быстрота разработки и удобство поддержки и развития кода, а не сверхскорость его исполнения. Иначе я бы не выбрал .NET, а выбрал какой-нибудь С или С++.



Где-то в степи

автор1 тяжелая инициализация в конструкторе, гораздо прагматичней инициализация по требованию
А если я сделаю конструктор по-умолчанию без инициализаций и конструктор с параметром контекста БД, куда и буду передавать этот контекст, созданный раньше, вне конструктора (а, например, в коде, его, конструктор, вызывающем)?

автор2 куча запросов бомбит сервер имхо не осмысленно.
проще сделать наследование c:ZZ и вытащить все одним джойном,( ну тут надо смотреть структуру)
Ну, может, и можно вытащить. Только у меня модель не обязательно повторяет структуру связей в БД. Так что если и получится вытащить джойном, то не всё. Я так думаю. С другой стороны, опять же про "бомбить" - так ли уж важно, один раз джойном я обращусь к БД, или три раза простым запросом? Велика разница? Снова стоит учесть, что у меня не высоконагруженный сервис и я не гонюсь за производительностью в первую очередь.

автор3 не желание применять фабрику и инжекции
А я о них только слышал. Я ещё не настолько развит, чтобы сразу прямо так знать, где и куда что из паттернов применить можно. Приведите, пожалуйста, пример, или дайте ссылку, как бы тут, в моём случае, можно было бы применить фабрику или инжекции.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406854
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAа Вы что под контекстом понимаете в своём посте выше?
Честно говоря так до конца и не понял что ТС имеет ввиду под контекстом, хоть и перечитал его пост три раза, в моем понимании контекст это набор бизнес-сущностей которыми оперирует приложение. Браться они могут из БД, из веб-сервисов, хоть из текстового файла, не суть...
Контекст - в терминах EF, как по ссылке было сказано. Т. е. класс, DBContext, экземпляры которого, собственно, и являются "как бы БД" для моего кода. Я его использую как репозиторий. По-моему, для простых проектов нормальный такой репозиторий. Во всяком случае, свой, находящийся по возможностям хотя бы близко к EF, я бы не написал.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406867
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторА если я сделаю конструктор по-умолчанию без инициализаций и конструктор с параметром контекста БД, куда и буду передавать этот контекст, созданный раньше, вне конструктора (а, например, в коде, его, конструктор, вызывающем)?
Я хотел сказать, что если я сделаю как договорились и дочитались выше - создам контекст в начале запроса и буду его передавать всяким конструкторам, которым он нужен? Так и советуют в той статье про EF.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406870
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кстати, я так понимаю, что тогда этот контекст надо создавать в методе контроллера, который вызывается пользователем, и затем передавать УЖЕ СОЗДАННЫЙ В КОНТРОЛЛЕРЕ контекст в модели (и дальше по иерархии моделей)? Да?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406872
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320, ну так ради бога, если нет жестких требований к производительности и если нет в контексте разделяемых между пользователями ресурсов, то генерируйте и убивайте контекст при каждом запросе...
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406910
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Кстати, я так понимаю, что тогда этот контекст надо создавать в методе контроллера, который вызывается пользователем, и затем передавать УЖЕ СОЗДАННЫЙ В КОНТРОЛЛЕРЕ контекст в модели (и дальше по иерархии моделей)? Да?Обычно всю работу с DbContext инкапсулируют внутри конкретной реализации репозитория. Репозиторий используют внутри класса-сервиса, что реализует бизнес-логику. Сами бизнес-объекты при этом остаются чистыми и ничего не знают о том, что для их отображения (mapping) используется EF и DbContext.
При таком подходе проще поддерживать, тестировать и развивать приложение. Также повторно использовать код, оптимизировать его, декорировать, рефакторить и прочее.

Если Вам надо иначе, то пишите иначе. Только учтите, что велика вероятность, что в дальнейшем столкнётесь с проблемами и код придётся переписать.

У Вас вон уже переход от трёх отдельных запросов к join вызывает трудности.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406923
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
Добрый день..
автортяжелая инициализация в конструкторе, гораздо прагматичней инициализация по требованию
что я имел ввидУ
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class A
{
	B b;
	ICollection<C> cc;

	public A()
	{
		DBContext db = new DBContext();
		b = new B();
		cc = db.CC.Select(c => new C(c)
	}
}


в контектсте ваших высказываний, что вы моделью будете пользоваться в разных вьюхах
проще сделать отложенную инициализацию ( поле в какой то вьюхе при каких то условиях может и не понадобиться, а конструктор
все равно сработает тынц , некоторые контейнеры умеют это исполнять.
запятая
что это? z => z.x == c.x, это же связь по внешнему полю, у вас не полно смапилась сущность, или не раскрыты все связи в базе данных - это уже большие вопросы
запятая
ib = db.II.First(); безусловно будет браться из кеша, можно оптимизировать..
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406935
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степи,
конечно об этом говрить можно много, но с моей точки зрения, нужно поработать с базой, или денормализовать ее, накинуть связи
там в общем то тремя запросами не пахнет, там куда больше
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38406961
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОбычно всю работу с DbContext инкапсулируют внутри конкретной реализации репозитория. Репозиторий используют внутри класса-сервиса, что реализует бизнес-логику. Сами бизнес-объекты при этом остаются чистыми и ничего не знают о том, что для их отображения (mapping) используется EF и DbContext.
При таком подходе проще поддерживать, тестировать и развивать приложение. Также повторно использовать код, оптимизировать его, декорировать, рефакторить и прочее.
Остается только добавить, что если приложение не сложное, то все это лишняя головная боль
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407006
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAОбычно всю работу с DbContext инкапсулируют внутри конкретной реализации репозитория. Репозиторий используют внутри класса-сервиса, что реализует бизнес-логику. Сами бизнес-объекты при этом остаются чистыми и ничего не знают о том, что для их отображения (mapping) используется EF и DbContext.
При таком подходе проще поддерживать, тестировать и развивать приложение. Также повторно использовать код, оптимизировать его, декорировать, рефакторить и прочее.
Остается только добавить, что если приложение не сложное, то все это лишняя головная боль Глупость. Если приложение не сложное, то и все его части по отдельности не сложные.

Я бы сказал иначе: если не планируется развивать и тиражировать приложение, если это разовый и мелкий заказ, - то да, можно и в стиле Smart UI выполнить, не заморачиваясь. Быстрее же

Вот только ТС что-то там развивать собрался и при подходе "а репозиторий мне пока не нужен и производительность мне не важна сейчас" велика вероятность наступить не на одни грабли.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407069
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторчто это? z => z.x == c.x
и прочее подобное.
Это и вообще почти все нагромождения в моём коде - чтобы просто показать, что я там что-то делаю, как-то выбираю данные и прочее. Основной вопрос - чего делать с контекстом БД в случае, когда много конструкторов одиз из другого вызываются.

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

автортяжелая инициализация в конструкторе, гораздо прагматичней инициализация по требованию
А, понял. Т. е. мне надо убрать все эти ToList() и просто пройтись тем же foreach'ем по IEnumerable (или IQuerable) в предсталении. Тогда непосредственно запрос из БД будет только на этапе создания представления, так?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407073
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторВот только ТС что-то там развивать собрался и при подходе "а репозиторий мне пока не нужен и производительность мне не важна сейчас" велика вероятность наступить не на одни грабли.
Приложение, скорее всего, будут развивать. Только здесь и сейчас просят в сжатые сроки, в которые я им нормальный репозиторий не выдам. Значит, будут переписывать потом нормально.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407078
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиГде-то в степи,
конечно об этом говрить можно много, но с моей точки зрения, нужно поработать с базой, или денормализовать ее, накинуть связи
там в общем то тремя запросами не пахнет, там куда больше
Я тут подумал. Наверное, джойнами можно будет. БД нормальная, и связей там может даже больше, чем надо. Просто я с джойнами не очень дружу. Мне проще три простых запроса и потом из их результатов создать сложную модель. Ну, я посмотрю, что там у меня можно с джойнами сделать. Ещё раз говорю, что код, что я написал - от балды, лишь бы показать, что конструкторы не пустые и что-то делают.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407120
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
да че вы стремаетесь, всему свое время, и вопросы ваши даже очень уместны и пральны для этого форума.
зы вон тетенька с форума выше долбит всех вопросами про комбики и гриды, хотя все это есть в справке, терпят же все..
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407139
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320Во-во. Если я напишу репозиторий и выложу свою поделку сюда, набегут критики, которые будут говорить, что конкуренции не обработаны, что нет защиты от дурака, что не предусмотрено аварийное отключение электроэнергии и пр. Уже обсуждали недавно в одной теме, где человек тоже про репозиторий спрашивал. Вроде, пришли в основном ко мнению, что либо делать хорошо, реализуя вот все эти хреновины с конкуренциями и пр., либо пользоваться ORM от EF как репозиторием напрямую.
Ой чую сча и на меня набросятся Но все же, набившись головой апстену с этими проблемами, забили нафиг на всякие репозитории, EF и иже с ним и вернулись к старому доброму T-SQL и довольны как слоны Пусть разработчики скуля борятся с конкуренциями и думают как данные сохранить когда суицидная крыса кабель питания сервака перегрызла
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407154
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI,
да че нет то, если все пацаны в команде согласны..
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407298
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320авторВот только ТС что-то там развивать собрался и при подходе "а репозиторий мне пока не нужен и производительность мне не важна сейчас" велика вероятность наступить не на одни грабли.
Приложение, скорее всего, будут развивать. Только здесь и сейчас просят в сжатые сроки, в которые я им нормальный репозиторий не выдам. Значит, будут переписывать потом нормально.Вы только предупредите о такой вероятности тех, кто просит, чтобы они потом не удивлялись, что новые требования вызывают следующую реакцию: "Чёрт, это надо всё переписывать".
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407324
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIuser7320Во-во. Если я напишу репозиторий и выложу свою поделку сюда, набегут критики, которые будут говорить, что конкуренции не обработаны, что нет защиты от дурака, что не предусмотрено аварийное отключение электроэнергии и пр. Уже обсуждали недавно в одной теме, где человек тоже про репозиторий спрашивал. Вроде, пришли в основном ко мнению, что либо делать хорошо, реализуя вот все эти хреновины с конкуренциями и пр., либо пользоваться ORM от EF как репозиторием напрямую.
Ой чую сча и на меня набросятся Но все же, набившись головой апстену с этими проблемами, забили нафиг на всякие репозитории, EF и иже с ним и вернулись к старому доброму T-SQL и довольны как слоны А за что тут набрасываться-то? Пишите как хотите, главное чтобы внезапно так не получилось.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407471
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAглавное чтобы внезапно так не получилось.
Почитал... бла-бла-бла... ниачом. Два каких-то куска говнокода и сразу вывод - логика на T-SQL гумно шарп рулит... Про невозможность модульного тестирования хранимок ваще поцталом. А то что два кодера за месяц налабали всю логику которую на T-SQL несколько лет писали ваще убило! Я так и не понял, с какими конкретно сложностями внедрения столкнулись? Приведенный кусок говнокода не смогли переписать или что? И главное:
Сейчас система готовится к выходу на новый объект для внедрения.
Ну вот когда внедрят тогда и будут понтами брызгать... короче ваще ниачом...
Вывод - херню можно создать на чем угодно, но на T-SQL что бы создать херню, нужно очень сильно постараться. ИМХО.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407498
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAглавное чтобы внезапно так не получилось.
Почитал... бла-бла-бла... ниачом. Два каких-то куска говнокода и сразу вывод - логика на T-SQL гумно шарп рулит... Про невозможность модульного тестирования хранимок ваще поцталом. А то что два кодера за месяц налабали всю логику которую на T-SQL несколько лет писали ваще убило! Я так и не понял, с какими конкретно сложностями внедрения столкнулись? Приведенный кусок говнокода не смогли переписать или что? И главное:
Сейчас система готовится к выходу на новый объект для внедрения.
Ну вот когда внедрят тогда и будут понтами брызгать... короче ваще ниачом...
Вывод - херню можно создать на чем угодно, но на T-SQL что бы создать херню, нужно очень сильно постараться. ИМХО.Тро-ло-ло.
Ты каким местом читал? Где там про гумно, где про невозможность модульного тестирования хранимок? Тебя если попросить систему, написанную на T-SQL, внедрить под Oracle, у тебя сложности не возникнут?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407507
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAро-ло-ло.
Ты каким местом читал? Где там про гумно, где про невозможность модульного тестирования хранимок?
Отсутствие модульных тестов: в C# коде сильная связанность и зависимость от внешних ресурсов, а на хранимые процедуры сложно писать модульные тесты
skyANAТебя если попросить систему, написанную на T-SQL, внедрить под Oracle, у тебя сложности не возникнут?
Без понятия, PL/SQL знаю крайне посредственно. Но с таким же успехом могу спросить - тебя если попросить систему, написанную на C#, внедрить на Java, у тебя сложности не возникнут?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407520
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIskyANAро-ло-ло.
Ты каким местом читал? Где там про гумно, где про невозможность модульного тестирования хранимок?
Отсутствие модульных тестов: в C# коде сильная связанность и зависимость от внешних ресурсов, а на хранимые процедуры сложно писать модульные тестыВыдели ту часть, где про гумно и про невозможность модульного тестирования хранимок. Или сложно - это синоним невозможности для тебя?

EDUARD SAPOTSKIskyANAТебя если попросить систему, написанную на T-SQL, внедрить под Oracle, у тебя сложности не возникнут?
Без понятия, PL/SQL знаю крайне посредственно. Но с таким же успехом могу спросить - тебя если попросить систему, написанную на C#, внедрить на Java, у тебя сложности не возникнут?Возникнут. Как они и у тех парней возникли.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407534
Фотография EDUARD SAPOTSKI
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAВыдели ту часть, где про гумно и про невозможность модульного тестирования хранимок. Или сложно - это синоним невозможности для тебя?
Ну уговорил, про невозможность тестов немного преувеличил А про гумно - весь смысл повествования - вынесли логику из хранимок - все зашибись, логически - хранимки гумно
Угадай, если бы Заказчик попросил клиента переписать на Java и оставить оракл, где бы вся логика оказалась?
skyANAВозникнут. Как они и у тех парней возникли.
Ну так о чем спич? И ваще это проблемы Заказчика, хочет T-SQL вместо PL/SQL или Java вместо C# пусть платит деньги.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407576
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKI, ты понаписал предвзятых глупостей, а теперь пытаешься стрелки перевести.

Описан реальный случай, где решили реальные проблемы (один из способ проектирования приложения со своими плюсами и минусами), при чём тут твои "а если"?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38407593
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
EDUARD SAPOTSKIУгадай, если бы Заказчик попросил клиента переписать на Java и оставить оракл, где бы вся логика оказалась? - Дублирование в Java коде
- Дублирование в PL\SQL-коде
- Дублирование между Java и SQL-кодом
- Бизнес-логика во всех слоях приложения

Угадал?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408422
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Приложение, скорее всего, будут развивать. Только здесь и сейчас просят в сжатые сроки, в которые я им нормальный репозиторий не выдам. Значит, будут переписывать потом нормально.Вы только предупредите о такой вероятности тех, кто просит, чтобы они потом не удивлялись, что новые требования вызывают следующую реакцию: "Чёрт, это надо всё переписывать".
На этом всё серьёзное мировое ПО стоит. Я тут даже боюсь соваться со своими нововведениями. Лучше сделаю как все, пока сам крутым не стал и не получил значимость и мировую известность. Потом создам свой шаблон проектирования. Какой-нибудь "со мной переписывать некогда не надо".
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408429
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где-то в степиuser7320,
не нравится
1 тяжелая инициализация в конструкторе , гораздо прагматичней инициализация по требованию
2 куча запросов бомбит сервер имхо не осмысленно.
проще сделать наследование c:ZZ и вытащить все одним джойном,( ну тут надо смотреть структуру)
3 не желание применять фабрику и инжекции
Да и вообще все не нравится вплоть до названий полей и классов
Я уже понял, что вы имели ввиду. Уже сделал проще. Типа такого . Там строка

ur => new UseRecommendationModel()

и далее данные передаются там. А в UseRecommendationModel свой подзапрос может быть. В результате всё в пределах одного запроса и контекст БД никуда в конструкторы не передаётся.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408461
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Вы только предупредите о такой вероятности тех, кто просит, чтобы они потом не удивлялись, что новые требования вызывают следующую реакцию: "Чёрт, это надо всё переписывать".
На этом всё серьёзное мировое ПО стоит. Я тут даже боюсь соваться со своими нововведениями. Лучше сделаю как все, пока сам крутым не стал и не получил значимость и мировую известность. Потом создам свой шаблон проектирования. Какой-нибудь "со мной переписывать некогда не надо".Философию не учили?
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408472
user7320
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

На этом всё серьёзное мировое ПО стоит. Я тут даже боюсь соваться со своими нововведениями. Лучше сделаю как все, пока сам крутым не стал и не получил значимость и мировую известность. Потом создам свой шаблон проектирования. Какой-нибудь "со мной переписывать некогда не надо".Философию не учили?
Мне она никогда не нравилась.
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408477
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320skyANAпропущено...
Философию не учили?
Мне она никогда не нравилась.Это многое объясняет
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408540
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAuser7320пропущено...

Мне она никогда не нравилась.Это многое объясняет
«Бритва Оккама
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408563
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
buserskyANAпропущено...
Это многое объясняет
«Бритва Оккама SOLID
...
Рейтинг: 0 / 0
Передача data context по иерархии конструкторов - надо, нет?
    #38408581
Фотография Где-то в степи
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
user7320,
вам надо под шлифовать базовые знания,
если у вас тяга к конструкторам
что такое конструктор, не партикулярно, а более глубже
что будет с объектом если произойдет исключение в конструкторе , и поведение коллектора.
Что такое Enumerable не партикулярно а в свете yield
что будет когда Enumerable.ToList
как коллекцию вернуть только на чтение не создавая новой коллекции.
Ну и конечно ленивая инициализация , ну хотя бы в свете однопоточночти..
В принципе ничего страшного, все достижимо..
...
Рейтинг: 0 / 0
55 сообщений из 55, показаны все 3 страниц
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Передача data context по иерархии конструкторов - надо, нет?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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