|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Не знаю куда написать видимо сюда. Пишу приложения, и вдруг ловлю себя на мысли что я делаю это не так! Пишу обычные клиентские приложения под БД на C#.NET 2.0. Ощущение что я это делаю не так. Вроде все как обычно создается MDI-приложение. Главное меню, огромное количество дочерних окон.В базе пишется огромное количество хранимых процедур,для вставки,изменения,просмотра записей.В проекте для большей скорости не используются DataSet'ы. Настройки программы сохраняются, в файлах, имеющих "свой" формат (не XML). Почти вручную заполняется DataGridView. Вручную же и ловятся выделенные в нем записи для изменения. Для обработки хранимых процедур пишется огоромное количество монотонного кода, разница в нем только кол-во параметров и название процедур. Ощущение что я код пишу как то по старым привычкам, что есть уже новый подход, и приложения пишутся намного быстрее или я не прав ? http://webusblog.blogspot.com/ ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2007, 12:28 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
webusДля обработки хранимых процедур пишется огоромное количество монотонного кода, разница в нем только кол-во параметров и название процедур.Имхо, это причина Ваших ощущений. В красиво спроектированной системе кол-во повторяющегося кода стремится к нулю. ... |
|||
:
Нравится:
Не нравится:
|
|||
15.10.2007, 13:04 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Есть хорошая книжка на эту тему "Архитектура корпоративных программных приложений" Мартин Фаулер. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 10:19 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Программист-ЛюбительЕсть хорошая книжка на эту тему "Архитектура корпоративных программных приложений" Мартин Фаулер. как раз щас читаю :) ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 10:22 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
покажи пример того что делаешь? ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 15:39 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
webusОщущение что я код пишу как то по старым привычкам, что есть уже новый подход, и приложения пишутся намного быстрее или я не прав ? Правы. И радует, что хоть кого-то еще посещают такие мысли. Новый подход есть примерно с 1955-го года - называется "выделение стандартных подпрограмм". К настоящему времени он весьма и весьма развит. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 16:25 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
softwarerНовый подход есть примерно с 1955-го года - называется "выделение стандартных подпрограмм". К настоящему времени он весьма и весьма развит. По моим ощущениям, его иногда не хватает... И приходится использовать кодогенерацию (в т.ч. "на лету") или макрогенерацию. Тоже, конечно, старо как мир. Но народ начал про это забывать, а сейчас это снова становится модно - на этом Rails выезжает. Количество кода может сократиться довольно существенно, но сам язык при этом опасный - при компиляции почти ничего не проверяется. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 19:34 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
>webus > ... В проекте для большей скорости не используются DataSet'ы ... После проверки ряда вариантов пришел к выводу, что имеет смысл использовать DataSet на клиенте. Только заполнять таблицу строками выборки так: ... SqlConnect conn= new SqlConnect(...); SqlCommand cmd= new SqlCommand("select ...") SqlDtaReader rdr = null; try { conn.Open(); //-- откроем соединение rdr=cmd.ExecuteReader(); while(rdr.Read()) { //-- Из строки формируем объект //-- Запись объекта в таблицу DataSet Table[0].LoadDataRow(obj,true); } rdr.Close(); catch (SqlException se) { ... } catch (Exception e) { ... } finally { if((rdr != null) && !rdr.IsCloseed) rdr.Close(); cmd.Dispose(); if(conn.State==ConnectionState.Open) conn.Close(); } ... Нудно конечно. Только надо помнить, что Dataset - почти база данных, но в оперативной памяти клиента. Поэтому - страничная подкачка. > ... Почти вручную заполняется DataGridView ... Имеет смысл связать его с таблицей DataSet (если он присутствует). С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
16.10.2007, 23:46 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
webusНе знаю куда написать видимо сюда. Пишу приложения, и вдруг ловлю себя на мысли что я делаю это не так! Пишу обычные клиентские приложения под БД на C#.NET 2.0. Ощущение что я это делаю не так. Вроде все как обычно создается MDI-приложение. Главное меню, огромное количество дочерних окон.В базе пишется огромное количество хранимых процедур,для вставки,изменения,просмотра записей.В проекте для большей скорости не используются DataSet'ы. Настройки программы сохраняются, в файлах, имеющих "свой" формат (не XML). Почти вручную заполняется DataGridView. Вручную же и ловятся выделенные в нем записи для изменения. Для обработки хранимых процедур пишется огоромное количество монотонного кода, разница в нем только кол-во параметров и название процедур. Ощущение что я код пишу как то по старым привычкам, что есть уже новый подход, и приложения пишутся намного быстрее или я не прав ? http://webusblog.blogspot.com/ В NET есть генерики, а вот на уровне SQL серверов нет. И я бы сказал - не хватает. Или приходится генерить налету sql код в клиентском приложении. Или тупо и монотонно писать дикое количество созраненных процедур и функций с тупо и монотоноо повторяющимся кодом. ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2007, 05:12 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
ВМоисеев>webus > ... В проекте для большей скорости не используются DataSet'ы ... После проверки ряда вариантов пришел к выводу, что имеет смысл использовать DataSet на клиенте. Только заполнять таблицу строками выборки так: ... SqlConnect conn= new SqlConnect(...); SqlCommand cmd= new SqlCommand("select ...") SqlDtaReader rdr = null; try { conn.Open(); //-- откроем соединение rdr=cmd.ExecuteReader(); while(rdr.Read()) { //-- Из строки формируем объект //-- Запись объекта в таблицу DataSet Table[0].LoadDataRow(obj,true); } rdr.Close(); catch (SqlException se) { ... } catch (Exception e) { ... } finally { if((rdr != null) && !rdr.IsCloseed) rdr.Close(); cmd.Dispose(); if(conn.State==ConnectionState.Open) conn.Close(); } ... Нудно конечно. Только надо помнить, что Dataset - почти база данных, но в оперативной памяти клиента. Поэтому - страничная подкачка. > ... Почти вручную заполняется DataGridView ... Имеет смысл связать его с таблицей DataSet (если он присутствует). С уважением, Владимир. То же самое делает Адаптер.Филл ... |
|||
:
Нравится:
Не нравится:
|
|||
17.10.2007, 16:12 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Alexsalog Или приходится генерить налету sql код в клиентском приложении. трындец sql серверу. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 08:15 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Lepsik Alexsalog Или приходится генерить налету sql код в клиентском приложении. трындец sql серверу. Почему? из за накладных расходов на компиляцию запроса на сервере? В Оракле есть связанные переменные - да. Тут и Том Кайт советует и примеры дает - хотя в этой области я начинающий. В практической работе запрос все равно формируется как строка на клиентской стороне и отправляется посредством Код: plaintext
В MS SQL - если sql запрос посылается с клиентской стороны, то я вообще не знаю у него никаких возможностей "предкомпиляции". А ради: Код: plaintext
Можно коенчно и на это идти - ради "оптимизации", но именно это и превращает разработку в тот монотонный и повторяющийся процесс о котором говорилось в начале. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 10:14 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Alexsalog Lepsikтрындец sql серверу. Почему? Забейте. Меня бы в принципе не огорчило, если бы sql серверу настал трындец, но я как-то долго выяснял этот вопрос с pkarklin-ым и Merle (одни из главным mssql-щиков здесь и на rsdn соответственно) и один из итоговых ответов был - MSSQL вполне нормально живет с клиентскими запросами, действуя примерно так же, как Oracle в режиме cursor_sharing=force. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 10:41 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Программист-ЛюбительЕсть хорошая книжка на эту тему "Архитектура корпоративных программных приложений" Мартин Фаулер. А еще он про рефакторинг написал. Вместе эти книги образуют совершенно термоядерную смесь - гарантированно можно угробить любой проект, если немедленно бросаться реализовывать все что там написано. webusОщущение что я код пишу как то по старым привычкам, что есть уже новый подход, и приложения пишутся намного быстрее или я не прав ? Намного быстрее они не пишутся, т.к. кодирование - это не самое главное. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 12:12 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
alexsalogИли тупо и монотонно писать дикое количество созраненных процедур и функций с тупо и монотоноо повторяющимся кодом. Есть прекрасные кодогенераторы(например,codesmith) c готовыми шаблонами для генерации процедур(впрочем, и любого кода).Затачиваешь их под себя, и весь гемморой сводиться к выбору имени таблицы.Никто не мешает подобным образом формировать весь необходимый винигрет:процедуры(запросы), классы для работы с БД(существуют шаблоны для многих ORM и DAL) и необходимые формы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 12:21 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Alexey Kudinov Вместе эти книги образуют совершенно термоядерную смесь - гарантированно можно угробить любой проект, если немедленно бросаться реализовывать все что там написано. да уж. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 13:08 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
А зачем бросаться?Многое из того, что там написано уже реализовано:CAB,SCSF,EntLib,Spring и тд. Может быть взять это и заточить под себя? Пример - cabana .Более легкий вариант - самопальный CAB ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 14:18 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
webusНе знаю куда написать видимо сюда. Пишу приложения, и вдруг ловлю себя на мысли что я делаю это не так! Пишу обычные клиентские приложения под БД на C#.NET 2.0. Ощущение что я это делаю не так. Вроде все как обычно создается MDI-приложение. Главное меню, огромное количество дочерних окон.В базе пишется огромное количество хранимых процедур,для вставки,изменения,просмотра записей.В проекте для большей скорости не используются DataSet'ы. Настройки программы сохраняются, в файлах, имеющих "свой" формат (не XML). Почти вручную заполняется DataGridView. Вручную же и ловятся выделенные в нем записи для изменения. Для обработки хранимых процедур пишется огоромное количество монотонного кода, разница в нем только кол-во параметров и название процедур. Ощущение что я код пишу как то по старым привычкам, что есть уже новый подход, и приложения пишутся намного быстрее или я не прав ? http://webusblog.blogspot.com/ Да нового подхода нет. Просто с ростом сложности и объёма проект перестаёт укладываться в голове и становится проще написать заново, чем искать уже написанное. Поэтому чтобы избавиться от монотонного кодирования - очень полезно проектировать до и документировать после. И ещё иметь хотя бы в голове представление о целях, которые преследует пользователь. Может, то что ему действительно нужно, можно реализовать по-другому, проще и быстрее, а то, что является лишним "бантиком" - просто выкинуть? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.10.2007, 14:57 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
>Сахават Юсифов >То же самое делает Адаптер.Филл Вы правы - da.Fill даст такой же результат. Но: 1. Скорострельность. 2. Разработчик должен владеть несколькими методами работы с базой данных. 3. Длинный и нудный вариант дает возможность оперировать с каждой строкой выборки. Её можно сериализовать и отправить, к примеру в двоичный файл. Мы же помним, что DataSet располагается в оперативной памяти, а её объём межет быть не соизмерим с объёмом выборки. Посмотри не превзято на такой вариант - в прикладную систему по каким-то соображениям введен app-сервер (AS). Его реализацией может быть и такая - Web-service поверх host-а IIS (например). Клиент же - нормальное WinForm приложение. AS располагается в локальной сети с сервером данных. Метод AS делает запрос к серверу данных и получает в ответ выборку, которую должен передать клиентскому приложению. Нужно ли AS использовать DataSet. Можно, но право не стоит. DataSet содержит избыточную информацию. Я сериализую выборку по-строчно с записью в MemoryStream, результат сжимаю (zip) и шифрую. И вот этот результат передаю клиентскому приложению. И только здесь на клиенте, для графических компонентов отображения, записываю выборку в таблицу локального DataSet. С уважением, Владимир. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 00:33 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
ВМоисеев>Сахават Юсифов >То же самое делает Адаптер.Филл Вы правы - da.Fill даст такой же результат. Но: 1. Скорострельность. 2. Разработчик должен владеть несколькими методами работы с базой данных. 3. Длинный и нудный вариант дает возможность оперировать с каждой строкой выборки. Её можно сериализовать и отправить, к примеру в двоичный файл. Мы же помним, что DataSet располагается в оперативной памяти, а её объём межет быть не соизмерим с объёмом выборки. Посмотри не превзято на такой вариант - в прикладную систему по каким-то соображениям введен app-сервер (AS). Его реализацией может быть и такая - Web-service поверх host-а IIS (например). Клиент же - нормальное WinForm приложение. AS располагается в локальной сети с сервером данных. Метод AS делает запрос к серверу данных и получает в ответ выборку, которую должен передать клиентскому приложению. Нужно ли AS использовать DataSet. Можно, но право не стоит. DataSet содержит избыточную информацию. Я сериализую выборку по-строчно с записью в MemoryStream, результат сжимаю (zip) и шифрую. И вот этот результат передаю клиентскому приложению. И только здесь на клиенте, для графических компонентов отображения, записываю выборку в таблицу локального DataSet. С уважением, Владимир. Владимир, это не АС, а какой-то приемопередатчик (это делают обычно, что бы обойтись НТТП только). Нормальный :) АС должен что-то кешировать, агрегировать, преобразовать и т.д., т.е. облеченный СУБД специализированный типа. Вот ту то и датасет и дататейбл и т.д. очень даже нужны. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 00:57 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
WCF очень даже. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 00:58 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
>Сахават Юсифов >Владимир, это не АС, а какой-то приемопередатчик. ... Сахават, я не ставил цель расписать все возможные функции сервера приложения. То о чем говорю я, для некоторых - это "толстый" драйвер. Для меня это -удаленные вычисления. Из того списка, что Вы привели - функционально ближе всего преобразования. Я привык оперировать не отдельным сервером приложений, а их пулом. Если текущий запрос выполняет СП(а), то далеко не факт что следующий запрос выполняться им, а не СП(?). Поэтому вопрос кеширования как бы повисает в воздухе (хотя и не отвергаю эту возможность - но кешировать придется на дополнительном общедоступном сервере). Агрегатирование можно делать и ХП на сервере данных, но если удобнее на СП, то почему нет. Сахават, я совсем не против использования DataSet и DataTable и широко их применяю в программах представления инфориации клиенту. Но они содержат избыточную информацию (например - три почти одинаковые строки в DataTable) - что не очень здорово при обмене. Но если приспичет - куда деваться. Сейчас также пытаюсь перебраться на WCF. Пока со скрипом. С уважением, Владимир ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 09:40 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Сахават ЮсифовНормальный :) АС должен что-то кешировать, агрегировать, преобразовать и т.д. Ничего этого "Нормальный АС" делать не должен - он просто исполняет приложения - его клиент - простой терминал: экран + клава + мыша + эмулятор. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 09:46 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
мод Сахават ЮсифовНормальный :) АС должен что-то кешировать, агрегировать, преобразовать и т.д. Ничего этого "Нормальный АС" делать не должен - он просто исполняет приложения - его клиент - простой терминал: экран + клава + мыша + эмулятор. Ну да. Я имел ввиду начинку, а Вы хость для начинки. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 15:58 |
|
Качественная разработка приложений
|
|||
---|---|---|---|
#18+
Сахават Юсифов мод Сахават ЮсифовНормальный :) АС должен что-то кешировать, агрегировать, преобразовать и т.д. Ничего этого "Нормальный АС" делать не должен - он просто исполняет приложения - его клиент - простой терминал: экран + клава + мыша + эмулятор. Ну да. Я имел ввиду начинку, а Вы хость для начинки. блин, как только появляется буква "т" в конце слова, так пальцы автомать ставят :) "ь". Что за фигня :( ... |
|||
:
Нравится:
Не нравится:
|
|||
19.10.2007, 15:59 |
|
|
start [/forum/topic.php?fid=33&msg=34878234&tid=1548911]: |
0ms |
get settings: |
8ms |
get forum list: |
15ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
137ms |
get topic data: |
10ms |
get forum data: |
2ms |
get page messages: |
65ms |
get tp. blocked users: |
1ms |
others: | 285ms |
total: | 531ms |
0 / 0 |