Re[13]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:09
Оценка: 1 (1)
Здравствуйте, adontz, Вы писали:

kuj>>Человек говорит Вам о рефакторинге и об опечатках в колонках. Когда у вас сотни процедур с таким вот именем колонки жестко прописанным в каждой процедуре...

kuj>>В случае с OR/M, поменяв имя колонки в базе, мне достаточно поменять его всего-лишь раз в файле мэпинга, а Вам придется перелопачивать все сотни процедур да еще и без стредств рефакторинга.

A>Гуляй

A>http://www.google.com/search?q=sql+refactoring+tools

Рефакторинг без юнит тестов? Удачи.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re: Оформление работы с БД в корпоративных приложениях - как
От: Kazna4ey  
Дата: 24.09.07 19:12
Оценка: +1
Добрый вечер,

Я автор темы
Очень интересно читать Вашу беседу.
ОЧЕНЬ хотелось бы попросить, чтобы вы привели примеры кода, с разных уровней, т.е. как выглядит код в уровне GUI (в обработчиках кнопок например), этот код будет взаимодействовать с объектами из следующего уровня — приведите код из следующего уровня и т.д. Т.е. чтобы можно было кратко представить целую картину по оформлению работы с БД в приложении. А то сейчас все довольно абстрагировано, по крайней мере для меня — человека НЕ С ВАШИМ уровнем и опытом.
Это относится к обоим выделившимся сторонам обсуждения (Adontz и все остальные .

Дальше есть несколько вопросов:

1) Как реализации ORM будут работать с MySQL? Например в последнем приложении я использую MySQL. Т.е. вообще для какой СУБД генерируются запросы? Простите если чего-то не понимаю.

2) Что если у запроса есть много параметров, появление которых зависит от различных checkbox'ов или radiobox'ов на форме. Нет ли проблем в таких случаях? Я так понимаю что нет, т.к. в случае ORM запрос будет генерироваться на основе только выбранных параметров, а в случае с ХП используется dynamic sql?

3) Как проявляют себя 2 выделенные технологии на небольших-средних проектах (БД из 30 — 50 таблиц, есть маленькие таблицы, есть таблицы с миллионами записей)? Или на какого размера проекты ориентированы обсуждаемые подходы?

4) Можно ли подробный пример действий, которые вы производите при модификации БД, например при добавлении/удалении столбца, или выноса нескольких столбцов в отдельную таблицу и замену их ключом (NewTableID) в оригинальной таблице?

5) Я так понимаю что BLT, LINQ это все реализации ORM ?

Заранее большое спасибо.
Re[15]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:12
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Aviator, Вы писали:


A>>>Видишь ли, Hibernate как правило наботает в tier бизнесс-логики. У этого подхода есть преимущества в администрировании. Так что чего т так удивился я не особо понял.

A>>Сам то понял что написал?

A>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема.


Все, что на Java... это простите что?

A>>Это sql, мы говорим о T-SQL и хранимках. типичный код хранимки не декларативный и представляет из себя жёское процедурное программирование


A>Это какая-то неправильная хранимка, она значит что-то лишнее делает.


Это уже не смешно... Вы это серьезно говорите?

A>>Что понимается по как попало объясните пожалуйста, а то я начинаю терять нить изложения.


A>Как попало обозначает "без виденья общей структуры БД, включая проведённые денормализации, кеширования и т.п.".

A>Нужно было работать с пользователями, прочитал документацию только про табличку Users, но не прочитал про таблички так или иначе с ней связанные и как следствие нарушил целостность данных некорерктными действиями.

Потому и нужен ORM.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[17]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:12
Оценка:
Здравствуйте, adontz, Вы писали:


A>>>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема.

C>>У меня вот два сервера БД (кластер с failover) и 3 app-сервера в качестве front-end'ов. Все прекрасно работает с Hibernate.

A>Почетай выше о чём вообще речь, kuj совсем не понимает чем транзакции уровня БД отличаются от транзакций уровня бизнес-логики.


Транзакции уровня бизнес-логики? Вот это круто. Вы это только что придумали?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[15]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:15
Оценка: 1 (1)
Здравствуйте, adontz, Вы писали:

kuj>>Кстати говоря, SQL это ни разу не декларативный язык.


A>Сильно. Я это сообщение добавлю в favorites в раздел Юмор, можно?


Вам все можно! Заодно добавьте всю эту ветку. У вас что ни пост — перл!
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[18]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 24.09.07 19:19
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>Здравствуйте, adontz, Вы писали:



A>>>>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема.

C>>>У меня вот два сервера БД (кластер с failover) и 3 app-сервера в качестве front-end'ов. Все прекрасно работает с Hibernate.

A>>Почетай выше о чём вообще речь, kuj совсем не понимает чем транзакции уровня БД отличаются от транзакций уровня бизнес-логики.


kuj>Транзакции уровня бизнес-логики? Вот это круто. Вы это только что придумали?

Ну на самом деле понятие бизнес транзакций вроде есть, но оно близко к понятию сферического коня в вакууме. Вобщем никакого отношения к тому что говорит наш общий друг — любитель хранимок — не имеет .
Re[16]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 24.09.07 19:21
Оценка:
Здравствуйте, kuj, Вы писали:

A>>>Это sql, мы говорим о T-SQL и хранимках. типичный код хранимки не декларативный и представляет из себя жёское процедурное программирование


A>>Это какая-то неправильная хранимка, она значит что-то лишнее делает.

Многоуважаемый adontz. Язык T-SQL является процедурным языком. Может Вы имеете в виду вашу собственную разработу декларативного языка для СУБД?
Re[13]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:25
Оценка:
Здравствуйте, adontz, Вы писали:

C>>Видимо, ты никогда не видел: http://tangosol.com/coherence-overview.jsp — кластерный транзакционный кэш, легко масштабируется на десятки машин (но стоит денег, сволочь). Сейчас используем тупой JBoss Cache — на кластере из пяти машин все спокойно живет, даже 100MBit не заполняет.


A>Этого действительно не видел. Суть проблемы это не меняет, неактуальный кеш — зло, эффективное поддержание кеша в актуальном состоянии — нетривиальная задача. Кстати ненасыщенность 100Мбит это не показатель. Сравнивать надо это с физическим ограничением сети, а с трафиком к клиентам.


Конечно это не тривиальная задача... Если программировать, используя такие средства, которые используете Вы. И вообще какое это все имеет отношение к кешу второго уровня Hibernate? Вы хоть знаете о чем ВООБЩЕ речь?


C>>Ага, такие вредные привычки как легкорефакторируемый код и запросы. Например, вот так умеет новая IDEA:

C>>

A>Нет, абсолютное забыванеи об индексах и представление, что объекты это точка отсчёта.


Ну вы хоть понимаете что такое индексы? А представления тут при чем?

Индексы строят под запросы, а не запросы под индексы.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[13]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:26
Оценка:
Здравствуйте, adontz, Вы писали:

C>>Видимо, ты никогда не видел: http://tangosol.com/coherence-overview.jsp — кластерный транзакционный кэш, легко масштабируется на десятки машин (но стоит денег, сволочь). Сейчас используем тупой JBoss Cache — на кластере из пяти машин все спокойно живет, даже 100MBit не заполняет.


A>Этого действительно не видел. Суть проблемы это не меняет, неактуальный кеш — зло, эффективное поддержание кеша в актуальном состоянии — нетривиальная задача. Кстати ненасыщенность 100Мбит это не показатель. Сравнивать надо это с физическим ограничением сети, а с трафиком к клиентам.


Конечно это не тривиальная задача... Если программировать, используя такие средства, которые используете Вы. И вообще какое это все имеет отношение к кешу второго уровня Hibernate? Вы хоть знаете о чем ВООБЩЕ речь?


C>>Ага, такие вредные привычки как легкорефакторируемый код и запросы. Например, вот так умеет новая IDEA:

C>>

A>Нет, абсолютное забыванеи об индексах и представление, что объекты это точка отсчёта.


Ну вы хоть понимаете что такое индексы? А представления тут при чем?

Индексы строят под запросы, а не запросы под индексы.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[19]: Оформление работы с БД в корпоративных приложениях -
От: MozgC США http://nightcoder.livejournal.com
Дата: 24.09.07 19:27
Оценка: 40 (2)
Уважаемые, постарайтесь более уважительно относиться друг к другу, излагать свое мнение/опыт и отстаивать свои убеждения нужно достойно.

У меня самого опыт небольшой, поэтому мне в ваш спор лезть нельзя, какое-то время назад начал активно использовать ХП, сейчас в базе их в районе сотни — по крайней мере пока проблем нет. И действительно ХП я считаю нужно писать разумно. Сегодня на интервью приходил программист, у него в базе много ХП по несколько страниц. Я думаю что вот как раз в таком случае и могут возникнуть проблемы и с поддержкой и с пониманием. Имхо ХП надо делать относительно краткими, и не сваливать на них все что только можно.
Re[14]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 24.09.07 19:28
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Aviator, Вы писали:


A>>Видите ли, Ваша позиция напоминает программистов, которые в стародавние временна утверждали, что реальтный пацаны пишут на асме, где полный контроль машины, С для недоделанных. Дальше были дискуссии, что у Java/.NET нет будущего, на них приложения всегда будут проигрывать в эффективности С++... Время расставило всё на свои места.


A>Видишь ли, у меня много-много лет опыта работы за спиной и я знаю что панацеи нет и любая технология, самая хорошая вообще, обязательно облажается на какой-нибудь конкретной задаче. Hibernate это очень удобно и хорошо (кто бы спорил), но не всегда применимо. Без ХП писать можно, более того мелкие проекты нужно писать без ХП. В большинстве приложений не нужен MVC, достаточно Document-View. Вообще из пушки по воробьям стрелять не надо. Я реально сталкивался с задачами где реляционная модель и объекная раличались очень сильно и использоание ORM превращаось в мучение, в результате отказывались. Есть задачи не тестируемые автоматически в принципе, так что никакой TDD не спасёт. Вообще не надо верить в технологии, у них всегда есть область применения, зачастую довольно узкая.

Ну это прям лозунг для баррикад. И что же за такие проекты, для которых применения маппера оборачивается мучением?TDD это не технология, это образ мышления. Если вы ищете спасение в TDD или ещё хз в чём, то может стоит задуматься о более тщательном проектировании, с оглядкой на то, как это делают сейчас, а не 10 лет назад? Тут как раз вопрос не столько о технологиях ( хотя и их надо тоже уметь своевременно менять ), а о образе мышленения, проектирования. Видишь ли, но с твоей тонной хранимок через несколько лет ты рискуешь оказаться единственным на поддержке понаписанного кода. И для мотивирования желания программистов этим заниматься придётся платить очень значительные деньги.
Re[14]: Оформление работы с БД в корпоративных приложениях -
От: Аноним  
Дата: 24.09.07 19:29
Оценка:
Здравствуйте, adontz, Вы писали:

A>Здравствуйте, Cyberax, Вы писали:


C>>Нет. Спор о том, что из ХП часто делают poor-man's DAL, что более нормально делается более нормальными инструментами.


A>А я к этому не призывал. Охотиться на ведьм можете в другом месте

да, настоящие мужчины не пользуются инструментами, они всё делают плоскогубцами, молотком и напильником .
Re[11]: Оформление работы с БД - оффтопик
От: Aviator  
Дата: 24.09.07 19:31
Оценка:
Здравствуйте, adontz, Вы писали:

A>> Не надоело минусы ставить?


A>Минус выражает несогласие. В чём проблема? Если тебя это задевает лично, я могу убрать. Оценка вообще-то ставится сообщению, а не автору.

Проблем никаких, просто прикололо

A>>Не ну серьёзно, удивляет упорство, теперь я понимаю почему ты так защищаешь хранимки

A>ХП мне просто нравятся. Было долгое время, когда я писал без них. Я жестоко ошибался.

Ндя, когда все начали от них отходить, ты толко узнал что это такое.
Re[2]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 24.09.07 19:47
Оценка: 2 (2)
Здравствуйте, Kazna4ey, Вы писали:

K>Добрый вечер,


K>Я автор темы

K>Очень интересно читать Вашу беседу.
K>ОЧЕНЬ хотелось бы попросить, чтобы вы привели примеры кода, с разных уровней, т.е. как выглядит код в уровне GUI (в обработчиках кнопок например), этот код будет взаимодействовать с объектами из следующего уровня — приведите код из следующего уровня и т.д. Т.е. чтобы можно было кратко представить целую картину по оформлению работы с БД в приложении. А то сейчас все довольно абстрагировано, по крайней мере для меня — человека НЕ С ВАШИМ уровнем и опытом.
K>Это относится к обоим выделившимся сторонам обсуждения (Adontz и все остальные .
Да лана пару примеров было, я даже четыре строки кода не поленился написать между прочим!

K>Дальше есть несколько вопросов:


K>1) Как реализации ORM будут работать с MySQL? Например в последнем приложении я использую MySQL. Т.е. вообще для какой СУБД генерируются запросы? Простите если чего-то не понимаю.

В конфиге Hibernate настраивается провайдер субд. Поддерживается mssql, firebird и ряд других субд, так что с запросами проблем не будет.

K>2) Что если у запроса есть много параметров, появление которых зависит от различных checkbox'ов или radiobox'ов на форме. Нет ли проблем в таких случаях? Я так понимаю что нет, т.к. в случае ORM запрос будет генерироваться на основе только выбранных параметров, а в случае с ХП используется dynamic sql?

В большинстве случаев будет удобно использовать Criteria. Это по сути конструктор запросов для хибернета, вот пример загрузки набора объектов с наложенными условиями из примеров к хибернету
IList cats = session.createCriteria(typeof(Cat))
    .Add( Restrictions.Like("name", "Fritz%") )
    .Add( Restrictions.Between("weight", minWeight, maxWeight) )
    .List();



K>3) Как проявляют себя 2 выделенные технологии на небольших-средних проектах (БД из 30 — 50 таблиц, есть маленькие таблицы, есть таблицы с миллионами записей)? Или на какого размера проекты ориентированы обсуждаемые подходы?

Это не имеет отношение к выбору подхода

K>4) Можно ли подробный пример действий, которые вы производите при модификации БД, например при добавлении/удалении столбца, или выноса нескольких столбцов в отдельную таблицу и замену их ключом (NewTableID) в оригинальной таблице?

При использовании Hibernate потребуется исправить чнебольшую часть XML, представляющего метаданные для отображения данного объекта в соответствующую таблицу.
Например вот что надо сделать в случае смены названия столбца Name->Name1
Исходный XML

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="DomainModel"
assembly ="DomainModel">


<class name="Stock" table="Stock" lazy="false">
<id name="Id">
<column name="id" sql-type="Int64" not-null="true"/>
<generator class="sequence">
<param name="sequence">gen_stockid</param>
</generator>
</id>

<property name="Name">
<column name="name"/>
</property>

</class>
</hibernate-mapping>

Новый XML

<?xml version="1.0" encoding="utf-8" ?>
<hibernate-mapping xmlns="urn:nhibernate-mapping-2.2"
namespace="DomainModel"
assembly ="DomainModel">


<class name="Stock" table="Stock" lazy="false">
<id name="Id">
<column name="id" sql-type="Int64" not-null="true"/>
<generator class="sequence">
<param name="sequence">gen_stockid</param>
</generator>
</id>

<property name="Name">
<column name="name1"/>
</property>

</class>
</hibernate-mapping>

Больше изменений в проектах не требуется.

K>5) Я так понимаю что BLT, LINQ это все реализации ORM ?


Типа того. BLT — вобщем кустарная штука. Hibernate — один из признанных промышленных реализаций. LINQ — этот интеграция языка запросов и всей инфраструктуры ORM в компилятор языка, что позволяет получить проверку запроса на этапе компиляции. Плюс Linq унифицирует доступ к разнородным провайдерам даннх, т.е. к СУБД, коллекциям,...

K>Заранее большое спасибо.
Re[11]: Оформление работы с БД - оффтопик
От: kuj  
Дата: 24.09.07 19:57
Оценка:
Здравствуйте, adontz, Вы писали:

A>ХП мне просто нравятся. Было долгое время, когда я писал без них. Я жестоко ошибался.


Вы еще более жестоко ошибаетесь полагаясь на ХП.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[2]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:57
Оценка:
Здравствуйте, Kazna4ey, Вы писали:


K>Я автор темы

K>Очень интересно читать Вашу беседу.
K>ОЧЕНЬ хотелось бы попросить, чтобы вы привели примеры кода, с разных уровней, т.е. как выглядит код в уровне GUI (в обработчиках кнопок например), этот код будет взаимодействовать с объектами из следующего уровня — приведите код из следующего уровня и т.д. Т.е. чтобы можно было кратко представить целую картину по оформлению работы с БД в приложении. А то сейчас все довольно абстрагировано, по крайней мере для меня — человека НЕ С ВАШИМ уровнем и опытом.
K>Это относится к обоим выделившимся сторонам обсуждения (Adontz и все остальные .

Вот прекрасная статья про NHibernate и его применение в enterprise-приложениях.
http://www.codeproject.com/aspnet/NHibernateBestPractices.asp

Особое внимание обратите на раздел "Real-World Architecture".

K>Дальше есть несколько вопросов:


K>1) Как реализации ORM будут работать с MySQL? Например в последнем приложении я использую MySQL.

Hibernate поддерживает MySQL, если не ошибаюсь, все его версии.
K>Т.е. вообще для какой СУБД генерируются запросы? Простите если чего-то не понимаю.
Для субд, диалект которой был указан в конфигурации Hibernate.

Примерно так выглядит: NHibernate.Dialect.MsSql2005Dialect

K>2) Что если у запроса есть много параметров, появление которых зависит от различных checkbox'ов или radiobox'ов на форме. Нет ли проблем в таких случаях? Я так понимаю что нет, т.к. в случае ORM запрос будет генерироваться на основе только выбранных параметров, а в случае с ХП используется dynamic sql?

Все будет нормально.

И DataBinding на BLL-объектах прекрасно работает в .NET.

K>3) Как проявляют себя 2 выделенные технологии на небольших-средних проектах (БД из 30 — 50 таблиц, есть маленькие таблицы, есть таблицы с миллионами записей)? Или на какого размера проекты ориентированы обсуждаемые подходы?

Для небольших проектов я бы вообще посоветовал Castle ActiveRecord — это очень эффективная и качественная реализация патерна ActiveRecord на базе NHibernate.

http://www.castleproject.org/activerecord/gettingstarted/index.html


K>4) Можно ли подробный пример действий, которые вы производите при модификации БД, например при добавлении/удалении столбца, или выноса нескольких столбцов в отдельную таблицу и замену их ключом (NewTableID) в оригинальной таблице?

При такой постановке вопроса:
Модифицируем схему БД.
Модифицируем мэппинг
Модифируем DAL
Прогоняем уже готовые модульные тесты для DAL, чтоб убедиться, что все ок.
Если надо добавляем новые тесты.
Ну и далее по иерархии делается весь необходимый рефакторинг.

Хотя чаще все же начинаем с верхов и спускаемся вниз.


K>5) Я так понимаю что BLT, LINQ это все реализации ORM ?


Про BLT затрудняюсь сказать... LINQ это язык интегрированных запросов для объектов, XML и других форм данных.

Для NHibernate уже есть наработки, по интеграции его с LINQ, что не может не радовать.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[2]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 19:57
Оценка:
Здравствуйте, Kazna4ey, Вы писали:

K>5) Я так понимаю что BLT, LINQ это все реализации ORM ?

Вот кстати по LINQ интересные webcast`ы:

http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/linq.wmv

http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/xlinq.wmv

http://download.microsoft.com/download/4/7/0/4703eba2-78c4-4b09-8912-69f6c38d3a56/dlinq.wmv
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[15]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 20:01
Оценка:
Здравствуйте, <Аноним>, Вы писали:


C>>>Нет. Спор о том, что из ХП часто делают poor-man's DAL, что более нормально делается более нормальными инструментами.


A>>А я к этому не призывал. Охотиться на ведьм можете в другом месте

А>да, настоящие мужчины не пользуются инструментами, они всё делают плоскогубцами, молотком и напильником .

Зубами и когтями...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[20]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 20:07
Оценка:
Здравствуйте, MozgC, Вы писали:

MC>Уважаемые, постарайтесь более уважительно относиться друг к другу, излагать свое мнение/опыт и отстаивать свои убеждения нужно достойно.


MC>У меня самого опыт небольшой, поэтому мне в ваш спор лезть нельзя, какое-то время назад начал активно использовать ХП, сейчас в базе их в районе сотни — по крайней мере пока проблем нет. И действительно ХП я считаю нужно писать разумно. Сегодня на интервью приходил программист, у него в базе много ХП по несколько страниц. Я думаю что вот как раз в таком случае и могут возникнуть проблемы и с поддержкой и с пониманием. Имхо ХП надо делать относительно краткими, и не сваливать на них все что только можно.


А есть еще любители триггеров понавешивать куда попало. Там вообще жуткий кошмар...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[21]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 24.09.07 20:14
Оценка:
Здравствуйте, adontz, Вы писали:


A>>Да что вы говорите . Вы статистику по проектам собирали или говорите на основании вашего горького опыта? Уже даже не смешно...


A>Просто не только складским учётом занимаюсь.


С такими подходами Вас и к складскому учету подпускать нельзя...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.