Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Просьба прокомментировать архитектуру... / 3 сообщений из 3, страница 1 из 1
26.01.2010, 19:47
    #36432264
Robin-Bobin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба прокомментировать архитектуру...
Я тут написал свое первое приложение с использованием базы данных (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.
        internal DateTime GetLastDate()
        {
            return (from curs in this.Currency
                    orderby curs.CursDate descending
                    select curs.CursDate).FirstOrDefault();
        }

5. В еще одном классе - BaseClass (это единственный public-класс в данной библиотеке) я инициализирую соединенине с базой данных:
Код: plaintext
1.
2.
3.
4.
5.
6.
        private my_base _my_base { get; set; }

        //конструктор
        public BaseClass(string connectionString)
        {
            _my_base = new my_base(connectionString);
        }

и прописываю все необходимые методы для обращения к базе данных извне, например, так:
Код: plaintext
1.
2.
3.
4.
5.
6.
        public DateTime GetLastDate()
        {
            if (!_my_base.DatabaseExists())
                return DateTime.MinValue;

            return _my_base.GetLastDate();
        }


6. В основной проект я подключаю эту dll, создаю экземпляр класса BaseClass и когда мне нужно получить/сохранить какие-то данные из базы данных, я просто обращаюсь к соответствующему методу класса BaseClass , а не пишу никаких линков в основной логике приложения.

Собственно, вопрос: насколько корректен/правилен/расширяем и т.д. такой подход? Может быть нужно сделать как-то по-другому, чтобы избежать каких-то подводных камней? Может есть какие-то Best Practices по этому поводу?

Заранее спасибо.
...
Рейтинг: 0 / 0
27.01.2010, 12:08
    #36433249
qu-qu
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба прокомментировать архитектуру...
Robin-Bobin... Может есть какие-то Best Practices по этому поводу?

"Best Practices", безусловно, есть... Называются они: Repository Pattern & Service Layer Pattern .
Здесь простенький пример их использования.

Основная мысль всех "Best Practices" заключается в том, что не приложение существует для данных (как в вашем подходе), а наоборот - данные служат приложению...

Т.о. в шаблоне Repository источник и природа данных "абстрагируются" за интерфейсом, который ничего не знает (и фактически не должен знать) о том - "откуда что берется?", если приложению нужен объект или список объектов типа Contact - то оно получает этот объект/список прямо из "репозитория", не особо заморачиваясь над тем - какие запросы к каким БД посылать... (об этом "знают" конкретные реализации).

Тоже самое и с Service Layer , только на уровне т.н. "бизнес-логики" (валидация, связи в графе и т.п.) - приложению незачем работать напрямую с репозиторием, т.к. все равно "сырые" данные так или иначе должны быть "обработаны" хоть какой-нибудь логикой...

З.Ы. существуют еще и другие "уровни (слои) абстрагирования", но эти 2 - наиболее общие...
...
Рейтинг: 0 / 0
30.01.2010, 00:20
    #36439779
Robin-Bobin
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Просьба прокомментировать архитектуру...
qu-qu,

Спасибо большое за ответ.

Слушайте, так если я правильно понял, то моя dll - реализует как раз Repository Pattern & Service Layer Pattern ?

В классе my_base у меня реализован Repository Pattern , а в классе BaseClass - Service Layer Pattern ..
Основное приложение данные получает только через BaseClass ( Service Layer Pattern )

Или я неправильно понял принцип?...
...
Рейтинг: 0 / 0
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Просьба прокомментировать архитектуру... / 3 сообщений из 3, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]