|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
|
ООП, модель данных и база данных28.12.2018, 08:57. Показов 5006. Ответов 21
Начитался я умных книжек, статей и прочего, в результате в голове полный «компот»
![]() Надеюсь сможете мне растравить все на свои места. В общем, у меня есть несколько небольших программ которые производят в основном обработку / конвертацию данных в формат понятный для одной коммерческой программы. С недавнего времени встала необходимость использования в них базы данных. Я выбрал firebird 3, а так же сами программы решил переписать на C#. До этого немного работал с C# .net в основном получалась гремучая смесь ООП и процедурно — функционального программирования. Допустим у нас есть некая база, по ней мы создаем модель данных, в результате у нас получается несколько классов описания модели. Так же нам необходимо создать класс так сказать посредник между провайдером данных и нашей моделью и тут у меня возникают трудности (в основном боязнь создать «божественный» класс). Класс посредника я представляю так, он должен принимать SQL команду (SQL процедуру, функцию и.д.) и ссылку на объект нашей модели, результатом выполнения должна быть заполненная модель данных или её часть. Вот не могу понять, как правильно связать dataadapter и модель, возможно dataadapter вообще лишнее звено и от него надо избавится, а взамен реализовать свой IDataReader. За dataadapter я держусь из-за того, что уже привык к удобству работать в отключенном режиме, легкому применению изменений, к статусам и версиям строк, и т.д.. Если без него, то отключенный режим необходимо будет реализовать в модели (версии и статусы данных), а так же динамическую подгрузку данных? Но опять же с dataadapter необходимо как-то из DataTables данные перемещать в модель, циклами как-то накладно получается или есть способ лучше? ADO.NET Entity Framewrok — не рассматриваю, да его использование почти все мои вопросы сведет на нет, но это такой жирный «монстр», что для меня его использование перебор, плюс его долгая работа с запросами, да вообще мне SQL синтаксис больше по душе. Присматриваюсь к Dapper (как я понял он как раз реализует свой интерфейс IDataReader), возможно он и будет моим спасением, но все же хотелось бы узнать, как все таки работать с моделью данных и чистым ADO.NET. Буду очень благодарен за любое разъяснение или примеры кода.
0
|
|
| 28.12.2018, 08:57 | |
|
Ответы с готовыми решениями:
21
База данных и ЕР-модель |
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
||||
| 28.12.2018, 09:47 | ||||
Сообщение было отмечено OttoFix как решение
РешениеПоищите примеры этого паттерна (репозиторий). Вам чаще всего будут попадаться примеры на основе Entity Framework, но это из-за популярности данной ORM. Сам паттерн применим к любому механизму работы с хранилищем. Включая голый ADO.NET, Dapper или вообще WebClient.
2
|
||||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||||
| 28.12.2018, 10:18 [ТС] | ||||
|
Не по теме: Спасибо, что осилили мои много буков :D
0
|
||||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
||
| 28.12.2018, 10:54 | ||
|
0
|
||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
|
| 29.12.2018, 06:18 [ТС] | |
|
И так, вроде бы все встает на свои места, после прочтения про паттерны Repository и Unit of work.
В результате, на текущий момент мне придется отказаться от идеи использовать модель данных в виду того, что у меня на текущий момент бизнес логика находится в базе данных, а репозиторий должен оперировать так сказать "сырыми" данными из базы, а не готовыми выборками из процедур. Но для закрепления материала попробую создать тестовое приложение с базой из 3-5 таблиц, моделью данных и бизнес логикой. Я правильно понимаю, для построения приложения по такому описанию, база должна содержать только сущности и логику целостности данных?
0
|
|
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|||
| 29.12.2018, 06:49 | |||
|
0
|
|||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||||||||
| 29.12.2018, 07:21 [ТС] | ||||||||
0
|
||||||||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|||
| 29.12.2018, 07:39 | |||
|
2
|
|||
|
79 / 102 / 44
Регистрация: 12.05.2015
Сообщений: 476
|
|||
| 29.12.2018, 07:50 | |||
|
0
|
|||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||||
| 29.12.2018, 08:51 [ТС] | ||||
|
Естественно полного просветления за несколько часов я не получил, но хотя бы начал улавливать суть. На практике думаю понимание придет лучше, поэтому начну понемногу разрабатывать тестовый проект. Как на Ваш взгляд, репозиторий должен быть один или для каждой сущности свой? Просто везде пишут по-разному. Еще раз спасибо за разъяснения. Добавлено через 5 минут Добавлено через 19 минут Добавлю, что бы Вы не подумали, что Ваши советы были напрасны. Я естественно продолжу дальше разбираться с этим вопросом, но это требует времени. А проект я не могу "заморозить" на неопределенный срок, поэтому я его доделаю с текущей базой и работой с dataadepter.
0
|
||||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|||||
| 29.12.2018, 08:57 | |||||
|
0
|
|||||
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||
| 29.12.2018, 09:02 [ТС] | ||
|
0
|
||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|
| 29.12.2018, 09:18 | |
|
OttoFix, это не так. Даже малейший намёк на валидацию или какой-нибудь 2+2 - уже бизнес логика. Даже байндинги (если есть) удобнее применять над нормальным типизированным представлением данных.
0
|
|
|
113 / 89 / 26
Регистрация: 11.12.2018
Сообщений: 331
|
||
| 29.12.2018, 09:36 [ТС] | ||
|
Я не оспариваю Ваши разъяснения, просто на текущий момент у меня не достаточно познаний в этом, что бы быстро смог реализовать. Поэтому, надеюсь Вы сможете мне еще помочь, но уже на конкретном моем тестовом проекте.
0
|
||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
||||||||||||
| 29.12.2018, 09:41 | ||||||||||||
1
|
||||||||||||
|
|
|
| 29.12.2018, 11:21 | |
|
Не по теме: Смешались в кучу, кони, люди Если речь идет о Database-centric архитектуре, где вся логика в хранимках, то Repository тут не нужен. Его даже физически прикрутить сложно будет. Смотрите на Data Mapper паттерн. Dapper может помочь вам (я с ним не работал, но наслышан). В свое время в подобном проекте использовали BlToolkit и Active record
1
|
|
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|
| 29.12.2018, 11:29 | |
|
0
|
|
|
|
||
| 29.12.2018, 12:30 | ||
|
Репозиторий - он все же есть подобие коллекции для доменных объектов. И очень сложно представить коллекцию, когда у тебя есть хранимка возвращающая одну запись, но нет хранимки для нескольких, для поиска, для Edit/Update/Delete. Получается уж очень как-то кривовато. Нет, вы можете назвать свои DAL объекты репозиторием, но от этого они репозиториями не станут.
0
|
||
|
14073 / 9290 / 1347
Регистрация: 21.01.2016
Сообщений: 34,877
|
|
| 29.12.2018, 15:51 | |
|
Cupko, репозиторий не подобие коллекции. Это абстракция над хранилищем, которая предоставляет методы по работе с этим хранилищем: добавлением, удалением, поиском записей. В этом плане хранимая процедура вообще ничего не меняет. Вообще. Хотите в виде хранимых процедур организовывать своё хранилище? Да пожалуйста! Репозиторий менее полезным от этого не станет.
Пара наших старых проектов по такой схеме и построены. В базе только хранимки, а над ними репозитории, которые преимущественно занимаются мапингом. Никаких противоречий ни в чём нет. Понадобился какой-то метод, который хранимками не реализован? Ну так напишите ещё одну хранимку.
0
|
|
|
|
||||
| 29.12.2018, 16:07 | ||||
|
Usaga, вы мой пост вообще читали?
![]()
Я не исключаю теоретической возможности работы с хранимками и репозиторием. Я говорю об его неуместности в Database-centric архитектуре.
0
|
||||
| 29.12.2018, 16:07 | |
|
Помогаю со студенческими работами здесь
20
Простая База Данных в txt файле (ООП)
Из базы данных сгенерировал модель. Как теперь через нее обращаться к базе данных Не открывается база данных Access , пишет неразпознаваемый формат базы данных Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
||||
|
Новый ноутбук
volvo 07.12.2025
Всем привет.
По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне:
Ryzen 5 7533HS
64 Gb DDR5
1Tb NVMe
16" Full HD Display
Win11 Pro
|
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
|
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
|
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов
На странице:
https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/
нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
|
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов.
. . .
|
|
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
|
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
|
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут.
В век Веб все очень привыкли к дизайну Single-Page-Application .
Быстренько разберем подход "на фреймах".
Мы делаем одну. . .
|
Фото: Daniel Greenwood
kumehtar 13.11.2025
|
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга,
Ты же видел моря и метели.
Как сменялись короны и стяги,
Как эпохи стрелою летели.
- Этот мир — это крылья и горы,
Снег и пламя, любовь и тревоги,
И бескрайние. . .
|