![]() |
|
Модераторы: Partizan, gambit |
![]()
|
|
| Exai1e |
|
||||||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
Здравствуйте, возник такой вопрос, по архитектуре классов работающих с бд:
К примеру, работа с базой данных. (все эти классы будут в сборке (Class Library) Есть класс, описывающий таблицу в БД (таких классов будет несколько, (таблиц не много))
Класс реализующий работу с данными в таблице (каждый класс <Table name>Manager реализует работу с определенной таблицей)
Основной класс доступа к данным, к нему будут обращаться из ГУИ приложения
В дальнейшем класс DataManager будет использован ГУИ App. к примеру
такой подход (что выше) изобилует catch'ами, это нормально ? или к примеру стоит проверять данные (на пустые поля) на уровне граф интерфейса, и не делать лишнего ParamsNotCorrectException ? Класс OperatorManager сделан как прослойка (Data Access Layout), для того, что бы к примеру при смене базы данных ( с FireBird на, например MS SQL) не были затронуты методы доступные гуи апп (из класса DataManager). Сторона "Приложения" нечего и не узнает о изменившейся бд этакая, мини реализация Hibernate Как бы вы реализовали подобный случай более "красиво" и правильно ? можно реализовать метод AddOperator на уровне DataManager, так что бы он возвращал false в случаи не удачи (не возможности добавить данные в бд) то тогда это не о чем не будет говорить стороне - клиента (гуи арр), будет ток понятно что "данные не удалось добавить", тоже вроде не очень красиво Надеюсь, более менее понятно изложил Спасибо Это сообщение отредактировал(а) Exai1e - 7.7.2010, 13:43 -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
||||||||
|
|||||||||
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Я бы так и делал. На уровне гуев тоже можно проверить некоторую адекватность, но имхо сейчас правильное решение выбрал.
Через некоторое время у тебя к добавлению операторов может быть прикручен другой гуй, так что проверка адекватности внутри тебе пригодится. К такому коду проще написать автоматические тесты. |
|||
|
||||
| N1ko |
|
||||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Как мне кажется Ваш подход изначально не совсем корректен. Предположем Вам захочется добавить ещё одну новую таблицу. Вы будете писать новый класс под неё, создавая новые поля,свойства, отвечающие за структруру таблицы? ИМХО это лишня трата усилий и времени. Я бы реализовал классы DBObject,DBTable,DBField и ещё дополнительные, которые позволят производить разные опреации над объектами БД. Например класс, который будет отвечать за выполнение процедур, либо вставки данных и тд. В таких случаях я обращаюсь к ДАО паттерну, дабы реализовать такую вот штуку. В результате что бы добавить новую таблицу, я просто вызову метод
Но это только моё мнение, которое не претендует на что то большее. Это сообщение отредактировал(а) N1ko - 8.7.2010, 13:54 |
||||
|
|||||
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
N1ko, Ваш код сложно тестировать(имею в виду автоматическое тестирование).
Вообще имеет право на жизнь, но все-же лучше иметь некоторую прослойку между отображением данных и средством хранения данных. Это дороже и больше писать. Но если дальше предполагается расширение, возможно смена метода хранения, то прослойка будет неоценима, упростит жизнь и сделает продукт дешевле и прозрачней. |
|||
|
||||
| N1ko |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 383 Регистрация: 30.12.2007 Где: Киев Репутация: нет Всего: нет |
Я не совсем понимаю, что значит прослойка. Не могли бы ли вы объяснить, что под этим подразумевается?
|
|||
|
||||
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Я всегда стараюсь следовать этому шаблону проектирования.
В данном случае роль сохранения данных в базу данных может выполнять сама модель, но я, как правило, делегирую сохранение другому объекту который на основании данных модели сохраняет их в базу. Это позволяет поддерживать несколько форматов. если следует сохранить в базу, то подключится один объект, если в XML, то другой, если забрать откуда еще, то третий. |
|||
|
||||
| Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
раньше я делал так, как в моем примере
*из старого проекта* ![]()
да, так и планировалось - если придется добавить новую таблицу, то буду делать новый класс Mephisto, А можно общий пример на основе моего ? Использующий MVC, хотя бы на "вскидку" с использованием псевдокода Спасибо -------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
| Mephisto |
|
|||
![]() Волкъ ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1818 Регистрация: 27.8.2003 Где: Питер Репутация: 2 Всего: 34 |
Дык зачем писать, гугл дает много хороших, толковых примеров на запрос "пример MVC" пример 1 Пример 2 оба неплохи, это из первых что посмотрел. Тут уже более сложно, но очень подробно в статье. |
|||
|
||||
| Exai1e |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 908 Регистрация: 3.12.2006 Где: Moscow Репутация: 3 Всего: 30 |
Mephisto, Спасибо
-------------------- "Решение зависит от выбранного геморроя" © Snowy "у нас как в армии - либо работает, либо так и задумано" |
|||
|
||||
| jonie |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 5613 Регистрация: 21.8.2005 Где: Владимир Репутация: 22 Всего: 118 |
Я бы лично наследовался не от Exception, а сделал бы базовый для вашей ORM (если так можно сказать) и наследовался бы от него.... тут и catch-ей можно поуменьшить (где надо)...
тема где я призываю вас пообсуждать достоинства и недостатки ORM -------------------- Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет... |
|||
|
||||
![]()
|
| Прежде чем создать тему, посмотрите сюда: | |
|
|
Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов. Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :) Так же не забывайте отмечать свой вопрос решенным, если он таковым является :) Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |