Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Клуб программистов > Свободное общение
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 19.11.2012, 14:22   #1
Ваня младший
Новичок
Джуниор
 
Регистрация: 19.11.2012
Сообщений: 2
Радость Как правильно создать БД

Здраствуйте. Как написать БД так чтобы стыдно не было исходники показывать другим. Раньше я БД писал только для курсачей (C# + MS SQL или PostgreSql) и весь код и sql запросы писал внутри кнопок , все раболтало на ура и все было хорошо.Вобщем решил на фрилансе заработать итеперь мне надо написать такую БД которую реально будут использовать на одном из преприятий и надо чтобы она была "Как у людей" . Подскажите пожалуйста как организовать мою программу правильным образом. В инете прочел что есть шаблоны проектирования но они походу слишком сложны и предназначены для больших информационных систем а уменя БД небольшая будет (Отдел кадров и Склад).

Сейчас думаю сделать так: Создать по классу на каждую таблицу БД и еще пару классов для работы с Connet - ом и пихнуть все в namspace DBManagment и подключить этот namespace к проекту. Но тут возникает много проблем как например невозможно выполнить транзакции при таком подходе.

Подскажите плиз как правильно все это сделать. Спасибо.
Ваня младший вне форума Ответить с цитированием
Старый 19.11.2012, 14:49   #2
Stilet
Белик Виталий :)
Старожил
 
Аватар для Stilet
 
Регистрация: 23.07.2007
Сообщений: 57,792
По умолчанию

Это зависит от конкретной задачи. Никакие паттерны тебе не помогут написать читабельно и оптимально, пока задача не будет четко поставлена. Под каждую задачу своя стратегия - к примеру где-то удобно применять вьюшки, а где-то функции, возвращающие таблицы. Или где-то удобно создавать временные таблицы для участия в запросах которые в цикле, а где-то достаточно рекурсивных запросов.
I'm learning to live...
Stilet вне форума Ответить с цитированием
Старый 19.11.2012, 16:08   #3
Ваня младший
Новичок
Джуниор
 
Регистрация: 19.11.2012
Сообщений: 2
По умолчанию

Спасибо что ответили Stilet. Решил использовать трехзвенку:

Вид -> БизнесЛогика -> БД

Конечно это все новое для меня но буду разбираться.

Бизнес логика будут представлять из себя набор классов для работы с
БД - там будет по одному классу на каждую таблицу БД и пару служебных классов (типа DBConnector). Как думаете прокатит такое?
Напр.
Класс инкапсулирующий таблицу Customers:
Методы:
DataRow GetCustomeById(int CustId);
DataTable GetAllCustomers();
String GetCustomrName(int CustId);
...И так далее для все[ полей - помоему получится примерно 16 методов (выборка,вставка,удаление,обновлени е) на таблицу...


Вид будет представлять из себя форму Windows Forms и никаких прямых запросов к БД не сможет давать - только через классы из бизнес слоя.
Напр:
Customer customer = new Customer();
String CustomerName = customer.GetName(1);//имя первого заказчика

БД - здесь будет сама база данных без каких либо тригеров и встроенных процедур. БД будет хранть инфу и все. Единственное что она будет делать это каскадное удаление связанных записей. БД будет храниться на отдельном компе.

Вобщем получаеться так: 20% логики в вид слое, 70% в бизнес логике и 10% в БД.

Поскажите пожалуйста я правильно спроектировал ? Или как то иначе это делают?
Ваня младший вне форума Ответить с цитированием
Старый 19.11.2012, 16:34   #4
pu4koff
Старожил
 
Аватар для pu4koff
 
Регистрация: 22.05.2007
Сообщений: 9,520
По умолчанию

Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Спасибо что ответили Stilet. Решил использовать трехзвенку:

Вид -> БизнесЛогика -> БД
Это не трёхзвенка.
Трёхзвенка - это БД -> Сервер -> Клиент.
Тут же просто деление на слои и их может быть хоть 5.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Конечно это все новое для меня но буду разбираться.
Я бы не заморачивался. В корпоративе не меньший колхоз, чем в универах. Потому что в универах не учат правильно писать программы.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Бизнес логика будут представлять из себя набор классов для работы с
БД - там будет по одному классу на каждую таблицу БД и пару служебных классов (типа DBConnector). Как думаете прокатит такое?
Не прокатит. Это не бизнес-логика.
Бизнес-логика - это те операции, которые есть в решаемой вами задаче.
Например, в карточной игре бизнес-логика может содержать операцию "Перетасовать колоду". В какой-то "продажной" программе может быть расчет скидки. Классы для работы с БД - это DAL (Data Access Layer) и он отдельно от бизнес-логики и желательно им вообще не пересекаться.
Для организации доступа к БД смотрите в сторону ORM, всяких Linq2sql и подобным готовым библиотекам. Если в программе 5 таблиц, а задание уже нужно выполнять и срок идёт, то я бы вообще не заморачивался и делал как умею.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Класс инкапсулирующий таблицу Customers:
Методы:
DataRow GetCustomeById(int CustId);
DataTable GetAllCustomers();
String GetCustomrName(int CustId);
...И так далее для все[ полей - помоему получится примерно 16 методов (выборка,вставка,удаление,обновлени е) на таблицу...
И что он инкапсулирует? Все эти методы минимум должны возвращать Customer, а выставлять наружу DataRow и DataTable - это вообще ни о чём.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Вид будет представлять из себя форму Windows Forms и никаких прямых запросов к БД не сможет давать - только через классы из бизнес слоя.
Напр:
Customer customer = new Customer();
String CustomerName = customer.GetName(1);//имя первого заказчика
Откуда возьмётся единица в настоящем приложении? Не хочется добавить еще слой контроллеров для видов, чтобы дополнить паттерн MVC?
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
БД - здесь будет сама база данных без каких либо тригеров и встроенных процедур. БД будет хранть инфу и все. Единственное что она будет делать это каскадное удаление связанных записей.
Пожалуй самый популярный вариант решения задачи, когда дело доходит до деления на слои, паттерны и ORM. Имеет право на жизнь, но важно не забывать синхронизировать каскадное удаление в программе, чтобы не оставалось объектов-фантомов, которые в памяти есть, но в базе уже не существуют.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
БД будет храниться на отдельном компе.
В БД нет никакой логики, значит её нужно защитить от постороннего вмешательства, иначе появятся люди с пустым ФИО или без ярко выраженного пола.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Вобщем получаеться так: 20% логики в вид слое, 70% в бизнес логике и 10% в БД.
А должно быть: 100% бизнес-логики в слое бизнес-логики. 100% логики по работе с видом в слое представления и 100% логики хранения данных в БД. Если бизнес-логика проста, тогда она прекрасно живёт в БД и слоем бизнес-логики можно частично пожертвовать.
Цитата:
Сообщение от Ваня младший Посмотреть сообщение
Поскажите пожалуйста я правильно спроектировал ? Или как то иначе это делают?
Это не проект. Это каша после прочтения типа умных книжек, которые забивают голову типа умными вещами, но на деле ничего не объясняют и только усложняют жизнь. Возьмите из прочитанного только анализ и забейте на всё. Всё это расслоение и все эти ORM либо сами придут, либо ну их к чёрту. Сейчас вы потенциально не выполняете работу в срок и создаёте одно из самых корявых в своей жизни приложений, т.к. в нём будет куча "костылей".
Делайте как умеете и совершенствуйтесь исходя из новой информации. Не нужно копировать все эти глупости из книжек с искусственными примерами.
pu4koff вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
DB Access - как правильно создать бд и связать таблицы? XerSon БД в Delphi 5 19.04.2011 11:41
Как правильно создать таблицу. matrixphp SQL, базы данных 4 05.03.2011 18:28
C++,есть код,как правильно создать очередь? Aleksandr_Yanov Помощь студентам 0 19.08.2010 14:22
как правильно создать html запрос miki131 PHP 4 25.11.2009 15:53
Как создать правильно запрос .... EugeneIsmatulin SQL, базы данных 15 28.05.2009 09:20