Re[26]: Оформление работы с БД в корпоративных приложениях -
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.09.07 04:55
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>При чем тут кеш второго уровня? oO


Я не знаю, это твой вечный аргумент. Чтобы я не сказал, ыт мне тычешь под нос кешем второго уровня.

kuj>И с чего Вы решили, что транзакции БД это единственный способ организации бизнес-транзакций?


Во-первых, я этого не говорил.
Во-вторых, утвержнение не верное. Транзакции БД это не просто не единственный способ, это не способ вовсе.

kuj>Разберитесь сначала в терминологии и не сваливайте все в одну кучу.


Взаимно.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[9]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 04:56
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>В теории всё должно работать так же, как и везде:

S>1. создали тестовую БД
S>2. наполнили ее тестовыми данными
S>3. прогнали набор тестовых операций
S>4. проверили нужные ассерты.
S>Я не вижу принципиальной разницы в сложности п.3 для ХП и ORM. Вся сложность обвчно в п.2. Если его выполнить, остальное сработает примерно одинаково.
Да, а как вы в процедурах делаете mocking? Или у вас все процедуры без зависимостей от других процедур и зависят исключительно от данных в БД?

Проблема с тестированием того же в DAL в ORM связанна непосредственно с БД. Тесты сами по себе могут менять состояние БД. Тестов много и они должны отрабатывать быстро и при этом БД нужно возвращать в исходное состояние каждый раз. Для больших проектов прогонка полного комплекта тестов на DAL может занимать часы, что мягко говоря не способствует их частой прогонке.

S>Поэтому сейчас появляются инструменты тестирования data-приложений, которые делают именно так. Например, MS VS for Database Professionals. Там можно тестовые данные генерить, можно снимать образец с production базы. Можно делать нагрузочное тестирование и проверять плазы запросов. И всё это в том числе автоматически и по расписанию.


Вот это уже интересно и по делу. Будем почитать.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[19]: Оформление работы с БД в корпоративных приложениях -
От: Cyberax Марс  
Дата: 25.09.07 05:02
Оценка:
Здравствуйте, adontz, Вы писали:

A>Даже если на 5 минут сойти с ума и предположить что ты прав, это всё равно не корректный способ сравнения — считать ключевые слова относящиеся к той или иной обласни. SELECT пишется гораздо гаще, на порядки чаще, чем CREATE, а исполняется в миллиарды раз чаще.

Не спорьте, вы оба правы Классический ANSI SQL — это декларативный язык.

T-SQL и PL/SQL кроме декларативного SQL еще поддерживают и императивные конструкции (циклы, сравнения, ветвления, присваивания).
Sapienti sat!
Re[27]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:19
Оценка:
Здравствуйте, adontz, Вы писали:

kuj>>При чем тут кеш второго уровня? oO


A>Я не знаю, это твой вечный аргумент. Чтобы я не сказал, ыт мне тычешь под нос кешем второго уровня.


Ну так разберитесь сначала с тем, что есть кеш второго уровня в Hibernate и зачем он нужен. К транзакциям же он никакого отношения не имеет.

kuj>>И с чего Вы решили, что транзакции БД это единственный способ организации бизнес-транзакций?


A>Во-первых, я этого не говорил.

A>Во-вторых, утвержнение не верное. Транзакции БД это не просто не единственный способ, это не способ вовсе.

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


kuj>>декларативное:

kuj>>SELECT ...

kuj>>императивное:

kuj>>CREATE TABLE, VIEW, INDEX, ...
kuj>>DROP TABLE, VIEW, INDEX, ...
kuj>>Так понятнее?

A>Так не понятнее, потому что глупость. DDL не является императивной частью, он точно такая же декларативная часть. Ты указываешь конечный результат — таблицу, а не пришешь генерацию внутреней структуры файлов: записей, индексов.


О да, по Вашей логике получается, что

MessageBox m = new MessageBox()
Это тоже декларативная конструкция, т.к. я "указываю на конечный результат" — MessageBox. Верно?

Почитайте определение императивного языка. Может поймете все же... А еще лучше изучите Prolog.

A>Даже если на 5 минут сойти с ума и предположить что ты прав, это всё равно не корректный способ сравнения — считать ключевые слова относящиеся к той или иной обласни. SELECT пишется гораздо гаще, на порядки чаще, чем CREATE, а исполняется в миллиарды раз чаще.


Хорошо, тогда ответьте мне, а HTML тоже является декларативным языком программирования?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[10]: Оформление работы с БД в корпоративных приложениях -
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.09.07 05:21
Оценка:
Здравствуйте, kuj, Вы писали:
S>>Я не вижу принципиальной разницы в сложности п.3 для ХП и ORM. Вся сложность обвчно в п.2. Если его выполнить, остальное сработает примерно одинаково.
kuj>Да, а как вы в процедурах делаете mocking? Или у вас все процедуры без зависимостей от других процедур и зависят исключительно от данных в БД?
Ну, вообще-то мокинг процедур, имхо, сделать вообще нереально. В том-то и дело, что в отличие от хорошо структурированных программ, базы данных имеют дело с shared state. Собственно, одна хранимка потребляет результаты другой исключительно в виде произведенных ею изменений в разделяемых данных. Я имею в виду ХП в смысле MS SQL Server. То, что в IB/FB делается через suspend я предпочитаю называть table-valued функциями, и я вовсе не уверен, что их вообще имеет смысл подменять моками при тестировании. Речь идет о том, что мы тестируем не отдельную хранимку, а поведение всей системы. И по-другому нельзя. По хорошему это именно так: подняли сервер, наколотили в него тестовых данных, выполнили набор SOAP вызовов.
С юнит-тестами тут тяжко, я вообще не очень понимаю, как можно что-то в базе заюниттестить. Не изолируется потому что нифига.

kuj>Проблема с тестированием того же в DAL в ORM связанна непосредственно с БД. Тесты сами по себе могут менять состояние БД. Тестов много и они должны отрабатывать быстро и при этом БД нужно возвращать в исходное состояние каждый раз. Для больших проектов прогонка полного комплекта тестов на DAL может занимать часы, что мягко говоря не способствует их частой прогонке.

Вообще говоря, прогон тестов раз в сутки — вполне достаточно. По сравнению с ручным тестированием, один цикл которого у нас занимает примерно три недели, это недостижимая мечта.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[17]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:23
Оценка:
Здравствуйте, adontz, Вы писали:

kuj>>В том и проблема, что тестировать процедуры самописными приложениями полноценно не выйдет. Для тестирования CLR у меня есть средства для мокинга, благодаря которым я могу тестировать конкретно нужный мне метод, а не этот метод И все методы, которые он вызывает, как пример.


A>Ты видимо не очень это понимаешь, но SQL и обсуждемые расширения с диалектами не являются ОО, а значит мок-объекты им не светят. По определению.

A>Кроме того, если мы говорим о тестировании, БД не являются сущностями, которые можно протестировать полностью. По той же причине, что и многопоточные приложения, например.

Рад, что вы хоть в чем-то разобрались со вчерашнего дня. Данный спор идет Вам на пользу:

"Кроме того, использование ХП позволяем автоматически тестировать самый низкоуровневый код работы с данными. Это особенно актуально при изменении схемы (добавлении столбца, а то и таблицы). "
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[20]: Оформление работы с БД в корпоративных приложениях -
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.09.07 05:25
Оценка:
Здравствуйте, kuj, Вы писали:

kuj>MessageBox m = new MessageBox()

kuj>Это тоже декларативная конструкция, т.к. я "указываю на конечный результат" — MessageBox. Верно?

Нет. Тут явный вызов функции.

kuj>Хорошо, тогда ответьте мне, а HTML тоже является декларативным языком программирования?


Декларативный — да, язык программирования — нет. HTML определяет статическую структуру документа (вместе с CSS — конечный автомат), а не какие-либо действия.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[28]: Оформление работы с БД в корпоративных приложениях -
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.09.07 05:26
Оценка:
Здравствуйте, kuj, Вы писали:

A>>Во-первых, я этого не говорил.

A>>Во-вторых, утвержнение не верное. Транзакции БД это не просто не единственный способ, это не способ вовсе.
kuj>Рад, что Вы наконец хоть с этим разобрались.

Я? Это ты разобрался. 12 часов назад ты утверждал что бизнес-транзакций вовсе нет!
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[18]: Оформление работы с БД в корпоративных приложениях -
От: adontz Грузия http://adontz.wordpress.com/
Дата: 25.09.07 05:27
Оценка:
Здравствуйте, kuj, Вы писали:

A>>Кроме того, если мы говорим о тестировании, БД не являются сущностями, которые можно протестировать полностью. По той же причине, что и многопоточные приложения, например.

kuj>Рад, что вы хоть в чем-то разобрались со вчерашнего дня. Данный спор идет Вам на пользу:
kuj>"Кроме того, использование ХП позволяем автоматически тестировать самый низкоуровневый код работы с данными. Это особенно актуально при изменении схемы (добавлении столбца, а то и таблицы). "

Ты всё вечно читаешь не так как написано, а так хочется твоему эго. Не полностью тестируемые не означает не тестируемые вовсе.
A journey of a thousand miles must begin with a single step © Lau Tsu
Re[11]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:30
Оценка:
Здравствуйте, Sinclair, Вы писали:

S>>>Я не вижу принципиальной разницы в сложности п.3 для ХП и ORM. Вся сложность обвчно в п.2. Если его выполнить, остальное сработает примерно одинаково.

kuj>>Да, а как вы в процедурах делаете mocking? Или у вас все процедуры без зависимостей от других процедур и зависят исключительно от данных в БД?
S>Ну, вообще-то мокинг процедур, имхо, сделать вообще нереально. В том-то и дело, что в отличие от хорошо структурированных программ, базы данных имеют дело с shared state. Собственно, одна хранимка потребляет результаты другой исключительно в виде произведенных ею изменений в разделяемых данных. Я имею в виду ХП в смысле MS SQL Server. То, что в IB/FB делается через suspend я предпочитаю называть table-valued функциями, и я вовсе не уверен, что их вообще имеет смысл подменять моками при тестировании. Речь идет о том, что мы тестируем не отдельную хранимку, а поведение всей системы. И по-другому нельзя. По хорошему это именно так: подняли сервер, наколотили в него тестовых данных, выполнили набор SOAP вызовов.
S>С юнит-тестами тут тяжко, я вообще не очень понимаю, как можно что-то в базе заюниттестить. Не изолируется потому что нифига.

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

kuj>>Проблема с тестированием того же в DAL в ORM связанна непосредственно с БД. Тесты сами по себе могут менять состояние БД. Тестов много и они должны отрабатывать быстро и при этом БД нужно возвращать в исходное состояние каждый раз. Для больших проектов прогонка полного комплекта тестов на DAL может занимать часы, что мягко говоря не способствует их частой прогонке.

S>Вообще говоря, прогон тестов раз в сутки — вполне достаточно. По сравнению с ручным тестированием, один цикл которого у нас занимает примерно три недели, это недостижимая мечта.

В том то и дело, что прогон раз в сутки часто не достаточно. В идеале тесты должны прогоняться после малейшего изменения. Потому и необходимо столь жесткое разделение на слои и домены: хранилище — DAL — BLL — ...
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[19]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:33
Оценка:
Здравствуйте, adontz, Вы писали:


A>>>Кроме того, если мы говорим о тестировании, БД не являются сущностями, которые можно протестировать полностью. По той же причине, что и многопоточные приложения, например.

kuj>>Рад, что вы хоть в чем-то разобрались со вчерашнего дня. Данный спор идет Вам на пользу:

kuj>>"Кроме того, использование ХП позволяем автоматически тестировать самый низкоуровневый код работы с данными. Это особенно актуально при изменении схемы (добавлении столбца, а то и таблицы). "


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


То есть ХП уже не тестируемые вовсе? Как полярно у Вас поменялось мнение... Надо же.
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[21]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:40
Оценка:
Здравствуйте, adontz, Вы писали:

kuj>>MessageBox m = new MessageBox()

kuj>>Это тоже декларативная конструкция, т.к. я "указываю на конечный результат" — MessageBox. Верно?

A>Нет. Тут явный вызов функции.


Где там явный вызов функции и чем это отличается от CREATE TABLE?

CREATE TABLE ...
CREATE INDEX ...
CREATE VIEW ...

— абсолютно императивная конструкция, описывающая логическую последовательность действий, которую необходимо выполнить.

При декларативном программировании нет никаких последовательностей действий, потому и порядок не имеет роли.

Декларативное программирование, это например

  predicates
      term (real, string)
  clauses
      term (T, "Лёд"):- T<=0.
        term (T, "Жидкость"):- T>0, T<=100.
      term (T, "Пар"):- T>100.


Так понятно?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[20]: Оформление работы с БД в корпоративных приложениях -
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.09.07 05:56
Оценка: +1
Здравствуйте, adontz, Вы писали:
A>Если бы T-SQL был чисто императивным процедурным языком, то тебе вместо декларативного описания результата запроса пришлось бы императивно определять план его исполнения. Этого не наблюдается.
Да-да. Неверящим в императивные языки программирования СУБД рекомендую ознакомиться c dBase/Clipper и посмотреть, как выполнялись всякие джойны и прочее в до-SQL эпоху.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[12]: Оформление работы с БД в корпоративных приложениях -
От: Sinclair Россия https://github.com/evilguest/
Дата: 25.09.07 05:56
Оценка:
Здравствуйте, kuj, Вы писали:
kuj>В том то и дело, что прогон раз в сутки часто не достаточно. В идеале тесты должны прогоняться после малейшего изменения. Потому и необходимо столь жесткое разделение на слои и домены: хранилище — DAL — BLL — ...
На доступном мне уровне развития науки, сие для БД-ориентированных приложений решительно невозможно. Даже не-БД тестировать "после малейшего изменения" нереально, т.к. банальная сборка мало-мальски сложного проекта начинает занимать больше времени, чем проходит между коммитами в SVN.
... << RSDN@Home 1.2.0 alpha rev. 677>>
Уйдемте отсюда, Румата! У вас слишком богатые погреба.
Re[29]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 05:59
Оценка:
Здравствуйте, adontz, Вы писали:


A>>>Во-первых, я этого не говорил.

A>>>Во-вторых, утвержнение не верное. Транзакции БД это не просто не единственный способ, это не способ вовсе.
kuj>>Рад, что Вы наконец хоть с этим разобрались.

A>Я? Это ты разобрался. 12 часов назад ты утверждал что бизнес-транзакций вовсе нет!

Не перекручивайте слова.

Напоминаю ход разговора:

----------
http://rsdn.ru/Forum/Message.aspx?mid=2668296&amp;only=1
Автор: adontz
Дата: 24.09.07


A>>Если транзакция нужна, а её нет ORM не спасёт.

kuj>Какие проблемы с транзакциями? OR/M отлично справляются с организацией транзакций.
БД справляется ещё лучше. Нельзя на ORM сваливать всё то, что лень было запрограммировать в БД, так как в результате ты получишь неповоротливую систему.
----------

----------
A>>>ОМГ. У тебя есть две машины, на одной всё что на java, на воторой SQL-сервер. Это достаточно стандартная схема.
C>>У меня вот два сервера БД (кластер с failover) и 3 app-сервера в качестве front-end'ов. Все прекрасно работает с Hibernate.

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


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

На что Вы в дальнейшем сказали:

----------
kuj>И с чего Вы решили, что транзакции БД это единственный способ организации бизнес-транзакций?

Во-первых, я этого не говорил.
Во-вторых, утвержнение не верное. Транзакции БД это не просто не единственный способ, это не способ вовсе.
----------


Мухи отдельно, котлеты отдельно, да?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re[13]: Оформление работы с БД в корпоративных приложениях -
От: kuj  
Дата: 25.09.07 06:00
Оценка:
Здравствуйте, Sinclair, Вы писали:


kuj>>В том то и дело, что прогон раз в сутки часто не достаточно. В идеале тесты должны прогоняться после малейшего изменения. Потому и необходимо столь жесткое разделение на слои и домены: хранилище — DAL — BLL — ...

S>На доступном мне уровне развития науки, сие для БД-ориентированных приложений решительно невозможно. Даже не-БД тестировать "после малейшего изменения" нереально, т.к. банальная сборка мало-мальски сложного проекта начинает занимать больше времени, чем проходит между коммитами в SVN.

А почему Вы решили, что нужно собирать весь проект?
... << RSDN@Home 1.2.0 alpha rev. 746>>
Re: Оформление работы с БД в корпоративных приложениях - как
От: Kazna4ey  
Дата: 25.09.07 06:02
Оценка:
Доброе утро/день!

11 страниц назад я попросил:

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


Вы конечно ничего никому не обязаны объяснять, но вот вам не жалко тратить ЧАСЫ на ведение этого спора, а несколько минут потратить чтобы вернуться к теме привести примеры — жалко?

Заранее спасибо...
Re[21]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 25.09.07 06:04
Оценка:
Здравствуйте, Sinclair, Вы писали:

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

A>>Если бы T-SQL был чисто императивным процедурным языком, то тебе вместо декларативного описания результата запроса пришлось бы императивно определять план его исполнения. Этого не наблюдается.
S>Да-да. Неверящим в императивные языки программирования СУБД рекомендую ознакомиться c dBase/Clipper и посмотреть, как выполнялись всякие джойны и прочее в до-SQL эпоху.
Ну работал я с таким АПИ без sql со старой СУБД. Но это никак не означает, что t-sql декалартивный язык .
Re[20]: Оформление работы с БД в корпоративных приложениях -
От: Aviator  
Дата: 25.09.07 06:06
Оценка:
Здравствуйте, Cyberax, Вы писали:

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


A>>Даже если на 5 минут сойти с ума и предположить что ты прав, это всё равно не корректный способ сравнения — считать ключевые слова относящиеся к той или иной обласни. SELECT пишется гораздо гаще, на порядки чаще, чем CREATE, а исполняется в миллиарды раз чаще.

C>Не спорьте, вы оба правы Классический ANSI SQL — это декларативный язык.

C>T-SQL и PL/SQL кроме декларативного SQL еще поддерживают и императивные конструкции (циклы, сравнения, ветвления, присваивания).

Только проблема в том, что в хранимках плотность императивных конструкций максимальна.
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.