Гость
Форумы / ADO.NET, LINQ, Entity Framework, NHibernate, DAL, ORM [игнор отключен] [закрыт для гостей] / Уменьшение зависимости от DAL слоя / 6 сообщений из 6, страница 1 из 1
10.05.2012, 02:38
    #37787159
_Thor_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
Приветствую

Возникла такая дилемма.
Есть простое приложение, попросту говоря "морда к базе", показать в гриде и отредактировать запись.
Для работы с БД используется Dapper .NET.
Есть классы сущности, отражающие таблицы в БД. От этих сущностей наследуются классы модели.

Может не совсем корректно описал, поэтому лучше покажу на примере:
Сущность:
Код: c#
1.
2.
3.
4.
5.
6.
7.
class ProductEntity
{
  int Id;
  string Name;
  int CategoryId;
  int UserId;
}



Модель:
Код: c#
1.
2.
3.
4.
5.
class ProductModel: ProductEntity
{  
  string CategoryName;
  string UserName;
}



Все SQL запросы реализованы в виде хранимых процедур. Соответственно ХП возвращает не чистую сущность, а уже готовую модель, для отображения пользователю.

Так вот дилемма состоит в том, что нужно уменьшить зависимость между сущностями и моделями.

Пока на уме только одно решение, это использовать интерфейсы для проецирования таблиц и запросов. Сделать своего рода так:
Сущьность:
Код: c#
1.
2.
3.
4.
5.
6.
7.
class ProductEntity: IProduct
{
  int Id;
  string Name;
  int CategoryId;
  int UserId;
}



Модель:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class ProductModel: IProductView
{  
  int Id;
  string Name;
  int CategoryId;
  int UserId;  
  string CategoryName;
  string UserName;
}



Но не уверен что это правильное решение, т.к. это в разы увеличивает код и соответственно усложняет его поддержку.

Посоветуйте наиболее компромиссное решение.

Спасибо.
...
Рейтинг: 0 / 0
10.05.2012, 08:42
    #37787241
kmaw
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
_Thor_,

Не надо вообще делать различие между сущностями и моделями.
...
Рейтинг: 0 / 0
10.05.2012, 09:56
    #37787302
_Thor_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
kmaw,

Я хочу выделить модели, что бы использовать их для валидации через атрибуты.
Хотя может все св-ва в сущностях сделать виртуальными...
...
Рейтинг: 0 / 0
10.05.2012, 22:47
    #37788546
besserebrenik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
_Thor_,

В свое время я нашел много материала об уменьшении зависимости от слоя DAL в этом блоге http://blog.byndyu.ru/

Я сам не очень опытный разработчик, но уже обжегся в поисках "серебряной пули". Делайте то, что нужно вам в данный момент
...
Рейтинг: 0 / 0
10.05.2012, 22:50
    #37788548
besserebrenik
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
_Thor_,

Кстати )) Занимаюсь тем-же ) Пытаюсь сейчас найти способ не объявлять все свойства виртуальными для мэппинга.. Вот тема , но пока никто не отвечает и, боюсь, из-за того, что иного варианта, как объявить свойства виртуальными - нет. Сам перерыл кучу буржуйских сайтов - тишина ) Если найдете способ не объявлять свойства виртуальными - отпишитесь!
...
Рейтинг: 0 / 0
12.05.2012, 11:31
    #37790642
_Thor_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Уменьшение зависимости от DAL слоя
После некоторого времени обдумывания и поисков, пришел к выводу что есть два наиболее подходящих варианта:
1. Dependency Injection
2. Не разделять сущности от моделей представления/бизнес логики.

Для варианта 1), набросал простой класс маппер однотипных объектов или имеющих одного предка, через Expressions, с возможностью передачи имен св-в в виде строки, которые не нужно маппить.
Но все же как не крути вариант 1) это значительное усложнение архитектуры проекта в целом, да еще представил как это все потом поддерживать...

Сам проект, как писалось ранее просто "морда к базе", как таковой бизнес логики там нет. Нужно просто прочитать данные и показать. Все зависимости между таблицами реализованы на уровне ХП и ограничиваются чтением поля Name из связанной таблицы. Поэтому потребности в дополнительном связывании объектов между собой.
В результате я решил прибегнуть к вариунту 2). Есть модели которые отражают результаты работы ХП. Сами ХП возвращают уже готовые к отображению данные.

Впрочем как сразу и ответил kmaw.

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


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