Здравствуйте, 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: Оформление работы с БД в корпоративных приложениях - как
Я автор темы
Очень интересно читать Вашу беседу.
ОЧЕНЬ хотелось бы попросить, чтобы вы привели примеры кода, с разных уровней, т.е. как выглядит код в уровне GUI (в обработчиках кнопок например), этот код будет взаимодействовать с объектами из следующего уровня — приведите код из следующего уровня и т.д. Т.е. чтобы можно было кратко представить целую картину по оформлению работы с БД в приложении. А то сейчас все довольно абстрагировано, по крайней мере для меня — человека НЕ С ВАШИМ уровнем и опытом.
Это относится к обоим выделившимся сторонам обсуждения (Adontz и все остальные .
Дальше есть несколько вопросов:
1) Как реализации ORM будут работать с MySQL? Например в последнем приложении я использую MySQL. Т.е. вообще для какой СУБД генерируются запросы? Простите если чего-то не понимаю.
2) Что если у запроса есть много параметров, появление которых зависит от различных checkbox'ов или radiobox'ов на форме. Нет ли проблем в таких случаях? Я так понимаю что нет, т.к. в случае ORM запрос будет генерироваться на основе только выбранных параметров, а в случае с ХП используется dynamic sql?
3) Как проявляют себя 2 выделенные технологии на небольших-средних проектах (БД из 30 — 50 таблиц, есть маленькие таблицы, есть таблицы с миллионами записей)? Или на какого размера проекты ориентированы обсуждаемые подходы?
4) Можно ли подробный пример действий, которые вы производите при модификации БД, например при добавлении/удалении столбца, или выноса нескольких столбцов в отдельную таблицу и замену их ключом (NewTableID) в оригинальной таблице?
5) Я так понимаю что BLT, LINQ это все реализации ORM ?
Заранее большое спасибо.
Re[15]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, 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]: Оформление работы с БД в корпоративных приложениях -
A>>>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема. C>>У меня вот два сервера БД (кластер с failover) и 3 app-сервера в качестве front-end'ов. Все прекрасно работает с Hibernate.
A>Почетай выше о чём вообще речь, kuj совсем не понимает чем транзакции уровня БД отличаются от транзакций уровня бизнес-логики.
Транзакции уровня бизнес-логики? Вот это круто. Вы это только что придумали?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[15]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, adontz, Вы писали:
kuj>>Кстати говоря, SQL это ни разу не декларативный язык.
A>Сильно. Я это сообщение добавлю в favorites в раздел Юмор, можно?
Вам все можно! Заодно добавьте всю эту ветку. У вас что ни пост — перл!
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[18]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, kuj, Вы писали:
kuj>Здравствуйте, adontz, Вы писали:
A>>>>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема. C>>>У меня вот два сервера БД (кластер с failover) и 3 app-сервера в качестве front-end'ов. Все прекрасно работает с Hibernate.
A>>Почетай выше о чём вообще речь, kuj совсем не понимает чем транзакции уровня БД отличаются от транзакций уровня бизнес-логики.
kuj>Транзакции уровня бизнес-логики? Вот это круто. Вы это только что придумали?
Ну на самом деле понятие бизнес транзакций вроде есть, но оно близко к понятию сферического коня в вакууме. Вобщем никакого отношения к тому что говорит наш общий друг — любитель хранимок — не имеет .
Re[16]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, kuj, Вы писали:
A>>>Это sql, мы говорим о T-SQL и хранимках. типичный код хранимки не декларативный и представляет из себя жёское процедурное программирование
A>>Это какая-то неправильная хранимка, она значит что-то лишнее делает.
Многоуважаемый adontz. Язык T-SQL является процедурным языком. Может Вы имеете в виду вашу собственную разработу декларативного языка для СУБД?
Re[13]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, 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]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, 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]: Оформление работы с БД в корпоративных приложениях -
Уважаемые, постарайтесь более уважительно относиться друг к другу, излагать свое мнение/опыт и отстаивать свои убеждения нужно достойно.
У меня самого опыт небольшой, поэтому мне в ваш спор лезть нельзя, какое-то время назад начал активно использовать ХП, сейчас в базе их в районе сотни — по крайней мере пока проблем нет. И действительно ХП я считаю нужно писать разумно. Сегодня на интервью приходил программист, у него в базе много ХП по несколько страниц. Я думаю что вот как раз в таком случае и могут возникнуть проблемы и с поддержкой и с пониманием. Имхо ХП надо делать относительно краткими, и не сваливать на них все что только можно.
Re[14]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, 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>А я к этому не призывал. Охотиться на ведьм можете в другом месте
да, настоящие мужчины не пользуются инструментами, они всё делают плоскогубцами, молотком и напильником .
Здравствуйте, adontz, Вы писали:
A>> Не надоело минусы ставить?
A>Минус выражает несогласие. В чём проблема? Если тебя это задевает лично, я могу убрать. Оценка вообще-то ставится сообщению, а не автору.
Проблем никаких, просто прикололо
A>>Не ну серьёзно, удивляет упорство, теперь я понимаю почему ты так защищаешь хранимки A>ХП мне просто нравятся. Было долгое время, когда я писал без них. Я жестоко ошибался.
Ндя, когда все начали от них отходить, ты толко узнал что это такое.
Re[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. Это по сути конструктор запросов для хибернета, вот пример загрузки набора объектов с наложенными условиями из примеров к хибернету
K>3) Как проявляют себя 2 выделенные технологии на небольших-средних проектах (БД из 30 — 50 таблиц, есть маленькие таблицы, есть таблицы с миллионами записей)? Или на какого размера проекты ориентированы обсуждаемые подходы?
Это не имеет отношение к выбору подхода
K>4) Можно ли подробный пример действий, которые вы производите при модификации БД, например при добавлении/удалении столбца, или выноса нескольких столбцов в отдельную таблицу и замену их ключом (NewTableID) в оригинальной таблице?
При использовании Hibernate потребуется исправить чнебольшую часть XML, представляющего метаданные для отображения данного объекта в соответствующую таблицу.
Например вот что надо сделать в случае смены названия столбца Name->Name1
Исходный XML
Больше изменений в проектах не требуется.
K>5) Я так понимаю что BLT, LINQ это все реализации ORM ?
Типа того. BLT — вобщем кустарная штука. Hibernate — один из признанных промышленных реализаций. LINQ — этот интеграция языка запросов и всей инфраструктуры ORM в компилятор языка, что позволяет получить проверку запроса на этапе компиляции. Плюс Linq унифицирует доступ к разнородным провайдерам даннх, т.е. к СУБД, коллекциям,...
K>Заранее большое спасибо.
K>Я автор темы K>Очень интересно читать Вашу беседу. K>ОЧЕНЬ хотелось бы попросить, чтобы вы привели примеры кода, с разных уровней, т.е. как выглядит код в уровне GUI (в обработчиках кнопок например), этот код будет взаимодействовать с объектами из следующего уровня — приведите код из следующего уровня и т.д. Т.е. чтобы можно было кратко представить целую картину по оформлению работы с БД в приложении. А то сейчас все довольно абстрагировано, по крайней мере для меня — человека НЕ С ВАШИМ уровнем и опытом. K>Это относится к обоим выделившимся сторонам обсуждения (Adontz и все остальные .
Особое внимание обратите на раздел "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.
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]: Оформление работы с БД в корпоративных приложениях -
C>>>Нет. Спор о том, что из ХП часто делают poor-man's DAL, что более нормально делается более нормальными инструментами.
A>>А я к этому не призывал. Охотиться на ведьм можете в другом месте А>да, настоящие мужчины не пользуются инструментами, они всё делают плоскогубцами, молотком и напильником .
Зубами и когтями...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[20]: Оформление работы с БД в корпоративных приложениях -
Здравствуйте, MozgC, Вы писали:
MC>Уважаемые, постарайтесь более уважительно относиться друг к другу, излагать свое мнение/опыт и отстаивать свои убеждения нужно достойно.
MC>У меня самого опыт небольшой, поэтому мне в ваш спор лезть нельзя, какое-то время назад начал активно использовать ХП, сейчас в базе их в районе сотни — по крайней мере пока проблем нет. И действительно ХП я считаю нужно писать разумно. Сегодня на интервью приходил программист, у него в базе много ХП по несколько страниц. Я думаю что вот как раз в таком случае и могут возникнуть проблемы и с поддержкой и с пониманием. Имхо ХП надо делать относительно краткими, и не сваливать на них все что только можно.
А есть еще любители триггеров понавешивать куда попало. Там вообще жуткий кошмар...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[21]: Оформление работы с БД в корпоративных приложениях -
A>>Да что вы говорите . Вы статистику по проектам собирали или говорите на основании вашего горького опыта? Уже даже не смешно...
A>Просто не только складским учётом занимаюсь.
С такими подходами Вас и к складскому учету подпускать нельзя...