Необходимо разработать клиента (Winform) для базы (Базу создал и заполнил начальными данными) MS SQL 2005.
Впрос в том, что я не могу понять какой подход являеться более правильным сточки зрения как проектирования П.О. так и дальнейшего соправождения, а именно каким образом получать данные для Клиента:
1. Использовать VIEW , тогда как вносить изменения, через VIEW не умею
2. Просто прописывать запросы в адаптеры таблиц, тогда вроде эффективность падает да и при дальнейшем изменении искать их по всем адаптерам тоже не очень удобно.
3. Существует другой способ который я не указал а вы его знаете и мне посоветуете .
З.Ы. NET 2.0. C# и MS SQL 2005
Если очень кратко, просто и грубо, то примерно так...
Загружать данные в память приложения из БД единожды, работать с ними, затем отправлять в БД только произведенные изменения. Для этого необходимо построить т.н. объекты бизнес-логики (уровень 1 — Business Logic Layer). В случае простой предметной области каждый объект может быть "осведомлен" о том, где в БД искать свои данные (см. шаблон проектирования Active Record). Чтобы облегчить объекты бизнес-логики (предметную область) от т.н. "шлюзования данных" необходимо выделить промежуточный слой (см. шаблон проектирования Data Mapper), который возьмет на себя ответственность за отображение объектов бизнес-логики в БД, разумеется, и наоборот (уровень 2 — Data Access Layer). Работать в GUI с объектами бизнес-логики (ранее загруженными данными из БД) по шаблону проектирования Model-View-Controller/Model-View-Presenter (уровень 3 — Presentation Layer). По запросу (к примеру, нажатию пользователем кнопки Save) отправлять в БД (опять же через уровень DAL) только измененные данные, для этого объекты бизнес-логики наделить соответствующими состояниями (см. шаблон проектирования State).
. Неплохо бы почитать статьи с этого сайта раздела "Проектирование ПО".
Re[2]: Вопрос начинающего
От:
Аноним
Дата:
14.06.07 01:30
Оценка:
Я конечно почитаю то что вы мне порекомендавали, но вот я немного запутался в слоях Какой находиться на каком уровне по удаленности от базы, т.е.
DATABASE -> Business Logic Layer -> Data Layer -> GUI или DATABASE -> Data Layer -> Business Logic Layer -> GUI и где в этом случае должен находиться слой Data Mapper?
Но вот еще вопрос на сколько будет оправдан такой подход к проектированию клиента в небольшом проекте. Просто это курсовик и меня спросят зачем так много сложностей если можно было использавать и более легкий спобоб — DataSet'ы
Здравствуйте, <Аноним>, Вы писали:
А>Какой находиться на каком уровне по удаленности от базы
DAL > BLL > PL
А>на сколько будет оправдан такой подход к проектированию клиента в небольшом проекте
На много.
А>. Просто это курсовик и меня спросят зачем так много сложностей если можно было использавать и более легкий спобоб — DataSet'ы
На самом деле это не так сложно, как кажется.
... << RSDN@Home 1.2.0 alpha rev. 679>>
Re[4]: Вопрос начинающего
От:
Аноним
Дата:
14.06.07 03:12
Оценка:
Здравствуйте, rsn81, Вы писали:
R>На самом деле это не так сложно, как кажется.
А не могли бы вы мне подсказать где можно скачать пример реализации подобного решения, как говориться лучше один раз увидеть чем 100 услышать. Просто я задачи подобного рода не решал и хочеться на ряду с теоретическими даннами и знаниями иметь и практический пример реализации, пусть даже и самый примитивный, ну хоть на примере двух отношений один ко многим и реализации простейшего клиента с возможностью отображения данных и внесения изменений. Вот.
Заранее благодарен!
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, <Аноним>, Вы писали:
А>>Какой находиться на каком уровне по удаленности от базы R>DAL > BLL > PL
А>>на сколько будет оправдан такой подход к проектированию клиента в небольшом проекте R>На много.
А>>. Просто это курсовик и меня спросят зачем так много сложностей если можно было использавать и более легкий спобоб — DataSet'ы R>На самом деле это не так сложно, как кажется.
Я тут не много поразмышлял и вот что на размышлял:
DAL — это SqlConnection, SqlTableAdapter, SqlDataReader также это запросы к базе данных кот я должен либо гененрить или откуда то брать?
BLL — ? бизнес логика что то не очень ясное можно по подробнее что обычно реализуют на утом уровне(слое) чем он заниметься?
PL — вот немного тоже не ясно что и счем его едять?
Далее не ясно, мне нужно будет строить свою иерархию классов? Например класс сотрудник, а он должен уметь себя "загружать" из базы и обновлять данные в базе? иерархия классов должа порожаться от какого нить общего класса или реализовывать ряд интерфейсов для взаимодействия с солоями и далее с базой.
Здравствуйте, <Аноним>, Вы писали:
А>Что то у меня венегред в голове получился
Вот вы уже начали ставить правильные вопросы.
Осталось только прочитать несколько статей и все встанет на места.
... << RSDN@Home 1.2.0 alpha rev. 679>>
Re[6]: Вопрос начинающего
От:
Аноним
Дата:
14.06.07 09:01
Оценка:
Здравствуйте, rsn81, Вы писали:
R>Здравствуйте, <Аноним>, Вы писали:
А>>Что то у меня венегред в голове получился R>Вот вы уже начали ставить правильные вопросы. R>Осталось только прочитать несколько статей и все встанет на места.
Да вот не давно получил задание на курсовой охото сразу в бой сголовою, читать надо время, а уже кипит!
Но конечно все прочитаю на выходных и по Гуглу полази, а там напишу что выяснилось!
Вы, по моему, начали решать вопрос обслуживания базы данных, и сугубо технологические вопросы, до того как продумали функционал.
Предлагаю вам поступить следующим образом.
1. Выбираете некоторый сценарий, например создание объекта A. Тупо реализуете его. Можно все уместить на одной форме. Можете спокойно воспользоваться адаптерами. Не стоит забывать что падение производительности на фоне работы базы данных можно вообще не учитывать. И вообще, вопрос производительности не стоит поднимать во время реализации.(задача у вас, насколько я понял, не алгоритмическая).
2. Выбираете следующий сценарий, создание объекта Б. Тупо реализуете его.
3. Просматриваете реализации, и выделяете одинаковый или очень похожий код в другой объект(ы).
4. Реализуете всю курсовую. (и надеюсь успешно сдаете ее).
5. Анализируете какие классы у вас выделились, что у них общего. Попытайтесь как-нибудь классифицировать их.
6. Начинаете читать статьи по архитектуре, и смотрите что получилось правильно, что возможно было еще улучшить, и т.д.
ЗЫ Выделение слоеной и компонентной архитектуры на самом начале проекта, предназначено для больших приложений, в которых существуют проблемы с управляемостью проектом и сложностью внесения изменений.
Здравствуйте, <Аноним>, Вы писали:
А>Да вот не давно получил задание на курсовой охото сразу в бой сголовою, читать надо время, а уже кипит!
А>Но конечно все прочитаю на выходных и по Гуглу полази, а там напишу что выяснилось!
А еще можно взять http://bltoolkit.com/ чтобы не писать все ручкаи.
... << RSDN@Home 1.2.0 alpha rev. 673>>
Пусть это будет просто:
просто, как только можно,
но не проще.
(C) А. Эйнштейн
Re[2]: Вопрос начинающего
От:
Аноним
Дата:
15.06.07 04:40
Оценка:
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Аноним, Вы писали:
GZ>Вы, по моему, начали решать вопрос обслуживания базы данных, и сугубо технологические вопросы, до того как продумали функционал.
GZ>Предлагаю вам поступить следующим образом. GZ>1. Выбираете некоторый сценарий, например создание объекта A. Тупо реализуете его. Можно все уместить на одной форме. Можете спокойно воспользоваться адаптерами. Не стоит забывать что падение производительности на фоне работы базы данных можно вообще не учитывать. И вообще, вопрос производительности не стоит поднимать во время реализации.(задача у вас, насколько я понял, не алгоритмическая).
Вопросы быстродействия в данной момент не интересуют, забиться об этом я собираюсь посже после реализации проекта, так сказать нужно потестировать и смотреть где слабые места и все такое и уже потом исправлять, оптимизировать.
GZ>2. Выбираете следующий сценарий, создание объекта Б. Тупо реализуете его. GZ>3. Просматриваете реализации, и выделяете одинаковый или очень похожий код в другой объект(ы).
Абстрогирование — я вкурсе что это и в принципе могу реализовать на этапе проектирования. Но всеравно спасибо. Как правило именно так получиться дописывать то что не увидел на этапе проектирования.
GZ>4. Реализуете всю курсовую. (и надеюсь успешно сдаете ее).
Я тоже надеюсь!
GZ>5. Анализируете какие классы у вас выделились, что у них общего. Попытайтесь как-нибудь классифицировать их.
Тоже понятно!
GZ>6. Начинаете читать статьи по архитектуре, и смотрите что получилось правильно, что возможно было еще улучшить, и т.д.
Уже читаю!
На самом деле у меня был немного другой вопрос, я хотел построить приложение по принципу изложенному в пункте 1 и спрашивал как правильно это сделать, мы использовали такой подход на лабораторных, но мне дали другое направление и я сейчас в этом разбираюсь!
Re[2]: Вопрос начинающего
От:
Аноним
Дата:
16.06.07 01:35
Оценка:
Здравствуйте, GlebZ, Вы писали:
GZ>Здравствуйте, Аноним, Вы писали:
GZ>Вы, по моему, начали решать вопрос обслуживания базы данных, и сугубо технологические вопросы, до того как продумали функционал.
GZ>Предлагаю вам поступить следующим образом. GZ>1. Выбираете некоторый сценарий, например создание объекта A. Тупо реализуете его. Можно все уместить на одной форме. Можете спокойно воспользоваться адаптерами. Не стоит забывать что падение производительности на фоне работы базы данных можно вообще не учитывать. И вообще, вопрос производительности не стоит поднимать во время реализации.(задача у вас, насколько я понял, не алгоритмическая). GZ>2. Выбираете следующий сценарий, создание объекта Б. Тупо реализуете его. GZ>3. Просматриваете реализации, и выделяете одинаковый или очень похожий код в другой объект(ы). GZ>4. Реализуете всю курсовую. (и надеюсь успешно сдаете ее). GZ>5. Анализируете какие классы у вас выделились, что у них общего. Попытайтесь как-нибудь классифицировать их. GZ>6. Начинаете читать статьи по архитектуре, и смотрите что получилось правильно, что возможно было еще улучшить, и т.д.
GZ>ЗЫ Выделение слоеной и компонентной архитектуры на самом начале проекта, предназначено для больших приложений, в которых существуют проблемы с управляемостью проектом и сложностью внесения изменений.
Вот теперь у меня еще вопрос: зачем заниматься проектированием (написанием) классов, если например можно просто использовать
БД -> DataAdaper() -> DataSet -> DataTable?
Адаптеры реализуют взаимодействие с базой, датасету паралельно какой источник данных и он представляет собой достаточно интересную вещь,
для каждого случая можно создать типизированные датасеты а можно и ручками по кодить, дататабле есть не что инное как колекция объектов хранящихся в базе, допустим есть сущность сотрудник, так я их в таблицу и строка таблицы это объект — сотрудник со всеми своими свойствами, так зачем же проектировать свои классы, интерфейсы когда все сделано, может несколько в не очень удомном виде, но ведь так быстрее и проще? Или я не прав? Или во всех выше изложеных постах мне и говорили просто создать "обертки" для строк и таблиц?
Здравствуйте, <Аноним>, Вы писали:
А>Вот теперь у меня еще вопрос: зачем заниматься проектированием (написанием) классов, если например можно просто использовать А>БД -> DataAdaper() -> DataSet -> DataTable? А>Адаптеры реализуют взаимодействие с базой, датасету паралельно какой источник данных и он представляет собой достаточно интересную вещь, А>для каждого случая можно создать типизированные датасеты а можно и ручками по кодить, дататабле есть не что инное как колекция объектов хранящихся в базе, допустим есть сущность сотрудник, так я их в таблицу и строка таблицы это объект — сотрудник со всеми своими свойствами, так зачем же проектировать свои классы, интерфейсы когда все сделано, может несколько в не очень удомном виде, но ведь так быстрее и проще? Или я не прав? Или во всех выше изложеных постах мне и говорили просто создать "обертки" для строк и таблиц?
Ну для больших приложений бизнес-объекты по любому приходится проектировать. А что касается DataSet vs Классы, то классы в большинстве случаев предоставляют большую гибкость в использовании. На небольших приложениях DataSet удобнее и быстрее делать.
GZ>Ну для больших приложений бизнес-объекты по любому приходится проектировать. А что касается DataSet vs Классы, то классы в большинстве случаев предоставляют большую гибкость в использовании. На небольших приложениях DataSet удобнее и быстрее делать.
Ну ведь если создавать типизированный датасет, то его можно жополнить всеми необходимыми методами и тоже самой касаеться всех таблиц и адаптеров. Просто я сразу хочу разобраться в этом, да и времени у меня навалом почьти год до сдачи курсового!
Здравствуйте, eJack, Вы писали:
J>Ну ведь если создавать типизированный датасет, то его можно жополнить всеми необходимыми методами и тоже самой касаеться всех таблиц и адаптеров. Просто я сразу хочу разобраться в этом, да и времени у меня навалом почьти год до сдачи курсового!
Чтобы не повторяться.
Здравствуйте, WolfHound, Вы писали:
WH>Здравствуйте, <Аноним>, Вы писали:
А>>Да вот не давно получил задание на курсовой охото сразу в бой сголовою, читать надо время, а уже кипит!
А>>Но конечно все прочитаю на выходных и по Гуглу полази, а там напишу что выяснилось! WH>А еще можно взять http://bltoolkit.com/ чтобы не писать все ручкаи.
Почитал понятно!
И еще один воросик! Какие книги рекомендуете почитать на данную тематику?