Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Новый топик    Ответить
 непонимание Data Access Layer  [new]
Белый ворон
Member

Откуда:
Сообщений: 59
привет. я ньюби в создании приложений баз данных.
может кто-нить немного проконсультировать о Data Access Layer с использованием Typed DataSet? имеются большие сомнения в правильности архитектуры.
база данных банальна: таблицы Customers и Orders, Customers родительская.
по моей первоначальной задумке я хотел сделать чтобы представление (класс формы проще говоря) ничего не "знало" ни о структуре БД, ни о модели.
спроектировал класс доступа к данным так, чтобы в нем были только "низкоуровневые" методы, все параметры и возвращаемые данные - стандартных типов .NET
DAL имеет интерефейс такого рода: DataTable GetAllCustomers(); void CreateCustomer(string name, string address); void CreateOrder(int custId, int amount, string description, DateTime date); и т.д.
датагриды занимаются только отображением, а добавление/редактирование/удаление записей производится с помощью других контролов.
проблема в том что все равно столкнулся с необходимостью явно в класе формы прописывать названия столбцов (например чтобы удалить выбранную запись надо выдернуть из датагрида значение Id и для этого пишу Cells["Id"], тоже самое чтобы скрыть столбец который юзер не должен видеть, или при настройке дочернего датагрида приходится явно задавать имя отношения: dgvDetails.DataMember = "FK_Customers_orders") что не согласуется с изначальной концепцией.
пришла в голову мысль чтобы DAL работал с датагридами сам (конфигурировал и выдергивал значения), но это тоже не комильфо.
как обычно в таких случаях делается?

ps я конечно понимаю, что такое банальное приложение для двух таблиц можно было сделать куда проще.
но у меня в требованиях наличие DAL и валидации. если DAL и можно упростить, то как скрестить валидацию и датагриды при условии что сама валидация не должна находиться в представлении - ума не приложу.
19 сен 12, 00:06    [13185748]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
Barkan
Member

Откуда: Дремучее заМКАДье
Сообщений: 502
Белый ворон,

Можно между формой и классом DAL ввести "посредника",
который будет знать как например обзывать столбцы в гриде.
Он же может например, принимать от формы (отдавать в форму)
объект описывающий сучность, внутри себя раскладывать/складывать
сучность на таблицы БД и вызывать соответствующие функции DAL.
19 сен 12, 05:33    [13185940]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
Белый ворон
проблема в том что все равно столкнулся с необходимостью явно в класе формы прописывать названия столбцов (например чтобы удалить выбранную запись надо выдернуть из датагрида значение Id и для этого пишу Cells["Id"]


используйте BindingSource



Белый ворон
тоже самое чтобы скрыть столбец который юзер не должен видеть, или при настройке дочернего датагрида приходится явно задавать имя отношения: dgvDetails.DataMember = "FK_Customers_orders")

всё это делается в проперти гриде, код вообще нужно писать


Белый ворон
если DAL и можно упростить, то как скрестить валидацию и датагриды при условии что сама валидация не должна находиться в представлении - ума не приложу.


типизированный DataSet это умеет делать, кроме того вы можете расширить (и/или) наследовать классы адаптеров
19 сен 12, 18:57    [13191530]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
Белый ворон,

но вообще-то я не сторонник датасетов
19 сен 12, 18:58    [13191536]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
Белый ворон
Member

Откуда:
Сообщений: 59
Всем спасибо.
Проблема решилась сама собой. Это было тестовое задание на позицию джуниора.
Уже устроился в другое место. Там не заставляют использовать датасеты :D
20 сен 12, 18:08    [13198031]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
Белый ворон
Member

Откуда:
Сообщений: 59
и тем не менее...
Barkan
Можно между формой и классом DAL ввести "посредника",
который будет знать как например обзывать столбцы в гриде.
Он же может например, принимать от формы (отдавать в форму)
объект описывающий сучность, внутри себя раскладывать/складывать
сучность на таблицы БД и вызывать соответствующие функции DAL.

интересный вариант. но опять же где размещать этого посредника. в клиенте, или в библиотеке доступа?

pation
используйте BindingSource

а где хранить экземпляр BS? в классе формы или в DAl'e?
автор
всё это делается в проперти гриде, код вообще нужно писать

оттого что что этот код будет храниться в form.designer.cs он кодом не перестанет быть :)
хотя в-общем да, настроить проще в дизайнере форм, чем рыскать по коду.
но меня больше смущала осведомленность класса формы об устройстве БД.

pation
типизированный DataSet это умеет делать, кроме того вы можете расширить (и/или) наследовать классы адаптеров

вы имеете ввиду события датасета?

pation
но вообще-то я не сторонник датасетов

мне они в принципе тоже не очень интересны.
20 сен 12, 18:19    [13198092]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
Белый ворон
pation
используйте BindingSource

а где хранить экземпляр BS? в классе формы или в DAl'e?


на форме
21 сен 12, 12:24    [13201102]     Ответить | Цитировать Сообщить модератору
 Re: непонимание Data Access Layer  [new]
pation
Member

Откуда: Москва
Сообщений: 4498
Белый ворон
автор
всё это делается в проперти гриде, код вообще нужно писать

оттого что что этот код будет храниться в form.designer.cs он кодом не перестанет быть :)
хотя в-общем да, настроить проще в дизайнере форм, чем рыскать по коду.
но меня больше смущала осведомленность класса формы об устройстве БД.


Откажись от DataSet, сделай свою модель с метаданными
21 сен 12, 12:26    [13201129]     Ответить | Цитировать Сообщить модератору
Все форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM Ответить