Какъв data access layer ползвате?
24 отговора
0 прегледа
Какъв data access layer ползвате?
Интересно ми е мнението на колегите относно новите течения в .нет. Нормална ли е според вас да се появата на табле адаптерите и дата аксеса да върви редом с дата ентититата? Какъв дата аксес ползвате в момента и прос и конс за последния ентерпрайз либрари?
Re: Какъв data access layer ползвате?
NHibernate!
Entity Data Model-a за който наскоро от MS пуснаха CTP също изглежда преспективен.
Entity Data Model-a за който наскоро от MS пуснаха CTP също изглежда преспективен.
Re: Какъв data access layer ползвате?
NHibernate :)
Pogledni , [линк] za "Practical NHibernate Basics" statiata koiato pisah.
Pozdravi,
- Nikola.
Pogledni , [линк] za "Practical NHibernate Basics" statiata koiato pisah.
Pozdravi,
- Nikola.
Re: Какъв data access layer ползвате?
Аз винаги съм имал проблем с концепцията един обект мапнат към таблица в базата данни. Ами ако даден обект трябва да събере данните си от няколко таблици, или примерно ако имаш обект клиент с много поръчкии искаш да извадиш поръчките му, при такива случаи съм виждал проекти които вадят едни масиви от обекти, пък те се наследяват през няколко нива до някакъв точно фреймуърк, който вади поръчките една по една понеже нали са мапнати, едни такива каши.
Не ми е ясно, защо трябва да се ограничаваш в някакъв фреймуърк, пък бил той и НХибернейт след като спокойно можеш да си направиш собствени класове по собствен вкус и оптимизация.
Все ми се струва че с тези фреймуърци дето ги импортват от Жабата само се утежняват нещата и всичко става една голяма каша.
Не ми е ясно, защо трябва да се ограничаваш в някакъв фреймуърк, пък бил той и НХибернейт след като спокойно можеш да си направиш собствени класове по собствен вкус и оптимизация.
Все ми се струва че с тези фреймуърци дето ги импортват от Жабата само се утежняват нещата и всичко става една голяма каша.
Re: Какъв data access layer ползвате?
Не следвай теченията пич. Най-много да затънеш в тях
. Дата аксеса дето върви с дата едитинга е железна концепция доказала себе си в Delphi от 1995 година насам. Не се увличай по object-relational mapping, че ще си скапеш проекта.
Re: Какъв data access layer ползвате?
Здравей,
Видях статията. Изглежда добре. Погледни и ти ако имаш време и мойта статия за Hibernate Session Management в [линк]
Поздрави
Видях статията. Изглежда добре. Погледни и ти ако имаш време и мойта статия за Hibernate Session Management в [линк]
Поздрави
Re: Какъв data access layer ползвате?
Не си съвсем прав. В НХибернате може един клас да се персистира в няколко таблици (примерно табле пер субцлас). Също така твойте класове не е необходимо на наследяват някакъв специален клас, който идва от фреймуърка. Дори не е нужно да имплементираш и интерфейс. Просто ти трябва един хмл файл, където да опишеш мапинга на класа в базата данни.
Re: Какъв data access layer ползвате?
Абе нямям много опит с Хибернейт, но ми се струва че това работи само при relation one to one, прав ли съм или не? Ами ето примерно имам клас Client, класа има проперtи array Orders. Kъдето ордерите са нула до безкрайност.
Клас иска ClientID към конструтора и след това си попълва полетата. Такъв обект може ли да се мапне с Хибернейт? Щото повечето обекти имат 0..* relations.
От друга страна гледам на доста места ползват вече тоя хибернейт, може и да се пробвам да го разгледам по-подробно ...
Клас иска ClientID към конструтора и след това си попълва полетата. Такъв обект може ли да се мапне с Хибернейт? Щото повечето обекти имат 0..* relations.
От друга страна гледам на доста места ползват вече тоя хибернейт, може и да се пробвам да го разгледам по-подробно ...
Re: Какъв data access layer ползвате?
Разгледах примера с клиента и поръчките, но не ми стана съвсем ясно тоя клас IList как работи, ако вади елементите един по един, тежко и горко на базата данни ...
Re: Какъв data access layer ползвате?
Мдааа, както и се очакваше:
[линк]
оттам можем да видим:
"The thing is that my company has built a prototype to compare the performance of NHibernate with pure Ado.Net. And the bad news is that the results are quite bad, so according to their findings, NHibernate is 3-4 times slower.
"
"Does your project require an extreme good performance? If so then just don’t consider NHibernate."
3-4 пъти по-бавно? Предполагам че ако го натоварим както трябва с повечко колекции из класовете може и до 10 към 1 да стигне, та май засега ще го оставим за по-нататък...
[линк]
оттам можем да видим:
"The thing is that my company has built a prototype to compare the performance of NHibernate with pure Ado.Net. And the bad news is that the results are quite bad, so according to their findings, NHibernate is 3-4 times slower.
"
"Does your project require an extreme good performance? If so then just don’t consider NHibernate."
3-4 пъти по-бавно? Предполагам че ако го натоварим както трябва с повечко колекции из класовете може и до 10 към 1 да стигне, та май засега ще го оставим за по-нататък...
Re: Какъв data access layer ползвате?
Нали знаеш какво казват за статистиката: "Има лъжа, нагла лъжа и статистика".
Ако наистина имаш нужда от производителност, тогава ползването на NHibernate ще ти бъде проблем. Обаче за това дето е бил 3-4 пъти по-бавен не съм съгласен. Аз също правих сравнение и се оказа, че NHibernate е наистина по-бавен, но забавянето не се забелязваше. Беше около 20-30%. Единствено серизен проблем имах при колоните от тип binary (примерно картинка записана в базата данни). Там наистина при по-големи картинки забавянето беше пъти. Но не съм си играл да го разследвам от какво идва. Може и да не съм направил нещо както трябва.
Ако обаче искаш да направиш приложение, което да работи на няколко бази от данни (SQL Server, Oracle и т.н.) тогава NHibernate ще е просто безценен. Също така дава много благинки като lazy loading, справя се с конкурентни обновявания на базата данни и т.н. Все досадни неща за които обикновенно сам трябва да се грижиш.
Ако наистина имаш нужда от производителност, тогава ползването на NHibernate ще ти бъде проблем. Обаче за това дето е бил 3-4 пъти по-бавен не съм съгласен. Аз също правих сравнение и се оказа, че NHibernate е наистина по-бавен, но забавянето не се забелязваше. Беше около 20-30%. Единствено серизен проблем имах при колоните от тип binary (примерно картинка записана в базата данни). Там наистина при по-големи картинки забавянето беше пъти. Но не съм си играл да го разследвам от какво идва. Може и да не съм направил нещо както трябва.
Ако обаче искаш да направиш приложение, което да работи на няколко бази от данни (SQL Server, Oracle и т.н.) тогава NHibernate ще е просто безценен. Също така дава много благинки като lazy loading, справя се с конкурентни обновявания на базата данни и т.н. Все досадни неща за които обикновенно сам трябва да се грижиш.
Re: Какъв data access layer ползвате?
Не мога да разбера за какво се мъчите така? Имаш си един ентити клас, напиши му методи Лоад и Саве и толкоз. С хибернате трябва да отваряш нов файл и вътре да пишеш ЬМЛ и да учиш нови тагове. Когато трябва да работиш с два файла вече работата ти се забавя.
Между другото, ако хибернате наруши някое check условие или пък се получи друга грешка как ще се разбере в Ц# кода?
Между другото, ако хибернате наруши някое check условие или пък се получи друга грешка как ще се разбере в Ц# кода?
Re: Какъв data access layer ползвате?
Тези методи Load и Save обаче се пишат много по-бавно отколкото XML файла, който използва само няколко основни тага.
При грешка ще се хвърли изключение.
При грешка ще се хвърли изключение.
Re: Какъв data access layer ползвате?
Новите течения в .нет-а са да се ползва адо.нет. Хиберната идва от Джава между другото, внимаввай. Аз съм виждал хиляди проекти на клиенти, по-голяма самонашивка от тези лейъри няма. Скоро бях постнал една много добра самонашивка от LLBLGen, който е нещо подобно. Едни ентитита скачаха през едни ченъли, едни стъбове, едни работи минаваха наляво надясно, не е истина.
Този Касев, който ти ги препоръчва е известен. Това е пича дето беше написал метод с 67 параметъра. Има го в дейли уотдъфак това. Поне да ги беше направил 69. Така че внимавай.
Препоръчително четиво:
lДжеф Атууд
После пусни orm vietnam в Гуугъл и чети поред. Дон Бокс най-вече.
--
Increasing Performance By Lowering Expectations.
Този Касев, който ти ги препоръчва е известен. Това е пича дето беше написал метод с 67 параметъра. Има го в дейли уотдъфак това. Поне да ги беше направил 69. Така че внимавай.
Препоръчително четиво:
lДжеф Атууд
После пусни orm vietnam в Гуугъл и чети поред. Дон Бокс най-вече.
--
Increasing Performance By Lowering Expectations.
Редактирано от Гypy на
Re: Какъв data access layer ползвате?
Сори, излъгах. 70 били параметрите на Касев. Все пак, българско ентри в доста престижен сайт. Браво!
Линк
--
Increasing Performance By Lowering Expectations.
Линк
--
Increasing Performance By Lowering Expectations.
Re: Какъв data access layer ползвате?
да, директното ползване на адо.нет е голяма работа, а най-яко става като мяташ обекти през ремотинг например или кат трябва да си дб индепендънт
ллблген-а има разни втф-та свързани с дизайна, като например, че делете съпорта не е 'фърст клас ситизен', но инак си работи идеално. Това, че генерираните ентитита си наследяват от тук и там си е в реда на нещата.
Бтв. идеално бих желал орм туул, който да има раундтрипинг и в двете посоки, ма в един идеален свят Мата щеше да лапа негърски пишки вместо да ме занимава с бъговете си по цял ден :P
ллблген-а има разни втф-та свързани с дизайна, като например, че делете съпорта не е 'фърст клас ситизен', но инак си работи идеално. Това, че генерираните ентитита си наследяват от тук и там си е в реда на нещата.
Бтв. идеално бих желал орм туул, който да има раундтрипинг и в двете посоки, ма в един идеален свят Мата щеше да лапа негърски пишки вместо да ме занимава с бъговете си по цял ден :P
Кашев, статията, проблем
То генерацията на код е хубаво нещо, но в много от "ръчно" написаните методи (като в този по-долу) има явно недомислие, което
при определени обстоятелства ще "срива" компонента, в който работи:
<code>
public void CreateOrder(Order OrderToCreate)
{
ITransaction transaction = null;
try
{
transaction = CurrentSession.BeginTransaction();
CurrentSession.Save(OrderToCreate);
transaction.Commit();
}
catch(HibernateException ex)
{
transaction.Rollback();
Console.WriteLine("EXCEPTION: " + ex.Message);
}
}
</code>
при определени обстоятелства ще "срива" компонента, в който работи:
<code>
public void CreateOrder(Order OrderToCreate)
{
ITransaction transaction = null;
try
{
transaction = CurrentSession.BeginTransaction();
CurrentSession.Save(OrderToCreate);
transaction.Commit();
}
catch(HibernateException ex)
{
transaction.Rollback();
Console.WriteLine("EXCEPTION: " + ex.Message);
}
}
</code>
Редактирано от AMД на
Re: Какъв data access layer ползвате?
Съгласен. Неползването на орм мапери на гарантира пак да се самонашиеш. Дейтасети на е хубаво да ходят наляво надясно по ремотинги и уебсървиси, да. То и ремотинг друг освен Инго Рамер не ползва. Според мен АДО-то е екстра, ако се ползва както трябва.
И вие ли ползвате LLBLGen? Ние във фирмата му викаме LL Cool J. От това, което виждам, е най-популярният мапър за .НЕТ, доста по -пулярен от Хибернейта. Без да съм ги ползвал и двете (и нямам намерение) съм сигурен, че Хибернейта е по-зле, като се има впредвид откъде идва.
--
Increasing Performance By Lowering Expectations.
И вие ли ползвате LLBLGen? Ние във фирмата му викаме LL Cool J. От това, което виждам, е най-популярният мапър за .НЕТ, доста по -пулярен от Хибернейта. Без да съм ги ползвал и двете (и нямам намерение) съм сигурен, че Хибернейта е по-зле, като се има впредвид откъде идва.
--
Increasing Performance By Lowering Expectations.
Re: Какъв data access layer ползвате?
Ша получиш още една снимка по-малко, че предишните вече са на конфети 
Машина за отделяне на кожа и сланина от парени свине
Машина за отделяне на кожа и сланина от парени свине