|
|
|
Просьба прокомментировать архитектуру...
|
|||
|---|---|---|---|
|
#18+
Я тут написал свое первое приложение с использованием базы данных (SQL Server Compact)... Посмотрите, плиз - все ли корректно с точки зрения архитектуры. Пошагово, как делал: 1. Создал проект (библиотека dll), который отвечает за общение с базой данных; 2. Создал базу данных my_base.sdf ; 3. С помощью sqlmetal.exe сделал к ней dbml-файл и включил его в проект; В проект таким образом, у меня подключилось 3 файла: my_base.dbml , my_base.dbml.layout , my_base.designer.cs . Объектная модель базы my_base ведется в файле my_base.designer.cs в partial-классе (это все в принципе стандарт, я просто расписываю для того, чтобы все разложилось по полочкам). 4. Далее, я добавляю в проект файл my_base.cs , в который включаю еще одну часть partial класса my_base и в этой части класса я прописываю все обращения к базе (т.е. все линк-запросы). Фактически, у меня в этом классе есть методы следующего типа: Код: plaintext 1. 2. 3. 4. 5. 5. В еще одном классе - BaseClass (это единственный public-класс в данной библиотеке) я инициализирую соединенине с базой данных: Код: plaintext 1. 2. 3. 4. 5. 6. и прописываю все необходимые методы для обращения к базе данных извне, например, так: Код: plaintext 1. 2. 3. 4. 5. 6. 6. В основной проект я подключаю эту dll, создаю экземпляр класса BaseClass и когда мне нужно получить/сохранить какие-то данные из базы данных, я просто обращаюсь к соответствующему методу класса BaseClass , а не пишу никаких линков в основной логике приложения. Собственно, вопрос: насколько корректен/правилен/расширяем и т.д. такой подход? Может быть нужно сделать как-то по-другому, чтобы избежать каких-то подводных камней? Может есть какие-то Best Practices по этому поводу? Заранее спасибо. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 26.01.2010, 19:47 |
|
||
|
Просьба прокомментировать архитектуру...
|
|||
|---|---|---|---|
|
#18+
Robin-Bobin... Может есть какие-то Best Practices по этому поводу? "Best Practices", безусловно, есть... Называются они: Repository Pattern & Service Layer Pattern . Здесь простенький пример их использования. Основная мысль всех "Best Practices" заключается в том, что не приложение существует для данных (как в вашем подходе), а наоборот - данные служат приложению... Т.о. в шаблоне Repository источник и природа данных "абстрагируются" за интерфейсом, который ничего не знает (и фактически не должен знать) о том - "откуда что берется?", если приложению нужен объект или список объектов типа Contact - то оно получает этот объект/список прямо из "репозитория", не особо заморачиваясь над тем - какие запросы к каким БД посылать... (об этом "знают" конкретные реализации). Тоже самое и с Service Layer , только на уровне т.н. "бизнес-логики" (валидация, связи в графе и т.п.) - приложению незачем работать напрямую с репозиторием, т.к. все равно "сырые" данные так или иначе должны быть "обработаны" хоть какой-нибудь логикой... З.Ы. существуют еще и другие "уровни (слои) абстрагирования", но эти 2 - наиболее общие... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 27.01.2010, 12:08 |
|
||
|
Просьба прокомментировать архитектуру...
|
|||
|---|---|---|---|
|
#18+
qu-qu, Спасибо большое за ответ. Слушайте, так если я правильно понял, то моя dll - реализует как раз Repository Pattern & Service Layer Pattern ? В классе my_base у меня реализован Repository Pattern , а в классе BaseClass - Service Layer Pattern .. Основное приложение данные получает только через BaseClass ( Service Layer Pattern ) Или я неправильно понял принцип?... ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 30.01.2010, 00:20 |
|
||
|
|

start [/forum/topic.php?desktop=1&fid=17&tid=1351489]: |
0ms |
get settings: |
6ms |
get forum list: |
10ms |
check forum access: |
2ms |
check topic access: |
2ms |
track hit: |
147ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
30ms |
get tp. blocked users: |
1ms |
| others: | 216ms |
| total: | 424ms |

| 0 / 0 |
