powered by simpleCommunicator - 2.0.59     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / BLL работает с Model или ViewModel?
109 сообщений из 109, показаны все 5 страниц
BLL работает с Model или ViewModel?
    #38546535
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всем привет! Тут на работе возник спор. У нас есть DAL, есть BLL. Соответственно контроллеры общаются с BLL. Так вот в чем вопрос - методы BLL должны использовать классы Model и в контроллере конвертить ViewModel в Model или же стразу ViewModel?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38546550
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STV,

про ViewModel BLL ничего не знает.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38546557
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttT_STV,

про ViewModel BLL ничего не знает.
Вот и я это говорю. ViewModel - это уже клиентская часть. но мне говорят нафига мы будем лишние движения делать, проще сразу из BLL вытаскивать ViewModel.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38546560
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVВот и я это говорю. ViewModel - это уже клиентская часть. но мне говорят нафига мы будем лишние движения делать, проще сразу из BLL вытаскивать ViewModel.

ох огребёте же потом проблем...
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38546579
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttT_STVВот и я это говорю. ViewModel - это уже клиентская часть. но мне говорят нафига мы будем лишние движения делать, проще сразу из BLL вытаскивать ViewModel.

ох огребёте же потом проблем...
Ещё не совсем поздно всё исправить
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547144
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttпро ViewModel BLL ничего не знает.
Хорошо бы, вот только половина выборок создаются именно для View.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547179
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttпро ViewModel BLL ничего не знает.
Хорошо бы, вот только половина выборок создаются именно для View.

так чего мелочиться, отдавайте из BLL сразу JSON
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547194
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтак чего мелочиться, отдавайте из BLL сразу JSON

hVosttох огребёте же потом проблем...


Можно описание проблем с которыми придется столкнутся?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547269
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

зависимость. при использовании отдельных ViewModel, точка зависимости V-M будет сосредоточена исключительно в контроллерах. если пойти дальше, то и вообще в маппере.

кода конечно больше, но контроля и возможностей при этом больше. на ViewModel можно безпрепятственно вешать разные атрибуты, влияющие на отображение, генерацию HTML-кода (UIHint, например), клиентскую валидацию, модель-байндинги всякие.

на BLL-классы эти вещи вешать категорически нельзя. а кто так делает, культяпки на плаху и долой их
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547277
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

а проблемы начнут сразу же возникать на предмет, где же этот нужный с*ка-класс определён, и рыскать по моделям, а не найдя в BLL. классно, чо.

некоторые отдельные привыкли считать, что программист намертво привязан к своему проекту и у него фантастически феноменальная память. на счёт того, что программист человек, его могут уволить и заменить другим, или он просто подзабудет детали реализации, особо не заморачиваются. главное быстрей быстрей что-нибудь выпустить, чтобы хоть как-то ворочалось
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547331
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttкультяпки на плаху

hVosttрыскать по моделям

hVosttнекоторые отдельные привыкли считать

Пустое.

hVosttпри использовании отдельных ViewModel, точка зависимости V-M будет сосредоточена исключительно в контроллерах
Зачем?
Каким образом в контроллере появятся нужные данные из БЛ? Тянуть всю модель и мапить?

Давай ближе к практике.
Допустим есть грид, который отображает некий срез данных. Делаю для него модель (viewmodel GridItem).
В слое BL, добавлю метод вроде List<GridItem> GetMyItems(bool isActive).

Как предлагаешь это реализовать?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547345
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонДавай ближе к практике.
Допустим есть грид, который отображает некий срез данных. Делаю для него модель (viewmodel GridItem).
В слое BL, добавлю метод вроде List<GridItem> GetMyItems(bool isActive).

Как предлагаешь это реализовать?

от эменно, хороший пример! во вью у меня генератор грида, который берёт из модели GridItem набор полей, распределяя их по колонкам. порядок следования, заголовок и описание для колонки берётся из атрибута Display. можно ли фильтровать, оттуда же. можно ли сортировать по полю или нет, к примеру, берётся из кастомного атрибута Sort... ну и так далее.

тянуть всю модель и мапить. в чём проблема-то?

Mapper.Map<IEnumerable<SomeDto>, Collection<SomeViewModel>>(source)

эта сколька ж буков!
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547349
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

на счёт срезов, выбор модели в абсолютном приоритете. если срезы предполагают рассчёты данных на стороне сервера, будет Dto для среза. и не надо экономить, вытаскивая модель. если получается так, что модели пухлые, из не одного десятка полей состоят, то пинать надо ногами горе-архитектора. прям под зад. сильно пинать.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547373
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttтянуть всю модель и мапить. в чём проблема-то?

Mapper.Map<IEnumerable<SomeDto>, Collection<SomeViewModel>>(source)

эта сколька ж буков!

Проблемы:

1. Дублирование.
SomeDto создан специально для среза, фактически для View, то есть дубль ViewModel. Лишняя сущность.

2. Лишний код.
Маппинг и другие, совершенно ненужные телодвижения.

3. Производительность.
Если тянуть модель целиком. Пинать архитекторов можешь и дальше, пока архитекторы тебя сами не пнут )

4. Проблемы с List<GridItem> GetMyItems(bool isActive) пока не ясны )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547410
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон1. Дублирование.
SomeDto создан специально для среза, фактически для View, то есть дубль ViewModel. Лишняя сущность.

2. Лишний код.
Маппинг и другие, совершенно ненужные телодвижения.

3. Производительность.
Если тянуть модель целиком. Пинать архитекторов можешь и дальше, пока архитекторы тебя сами не пнут )

не обижайся, но аргументы на уровне школьника.
1) это не дублирование: у DTO и у ViewModel совершенно разные задачи. это только в шарашкиных конторах бывают программисты-админы-заправлялщики-принтеров-подключальщики-мышей-меняльщики-обоев-на-рабочем-столе в одном лице. и точно также в шарашкиных конторах не умеют увидеть разницу между DTO и ViewModel.
2) маппинг как раз создан для облегчения непосильного труда ленивых программистов, и "лишние" телодвижения окупятся рано или поздно с лихвой.
3) бред какой-то по поводу производительности. а вот архитекторов по ходу набирают откуда попало и хорошо, если им вообще платят.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547421
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонList<GridItem> GetMyItems(bool isActive)

во-первых, за использование List как типа возврата, по рукам!

во-вторых, понятие "Grid" есть только во вью, и то: сегодня грид, а завтра красивая адаптивная плитка. в этом и смысл. BLL по барабану должно быть в каком виде будут отображены данные. он не подстраивается под View.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547461
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttне обижайся, но аргументы на уровне школьника.

Я не обижаюсь на блаженных )

hVostt2) маппинг как раз создан для облегчения непосильного труда ленивых программистов, и "лишние" телодвижения окупятся рано или поздно с лихвой.
Для решения проблем, которые сам и создал на ровном месте ).
Остальное в том же стиле )

hVosttво-первых, за использование List как типа возврата, по рукам!
За ответы без аргументов, по голове )
hVosttBLL по барабану должно быть в каком виде будут отображены данные. он не подстраивается под View.

Заказчик хочет определенный функционал с определенным дизайном. Если пляшем от этого, значит BLL подстраивается под View.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547473
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон,

дело ваше. хороший BLL не подстраивается под View. это просто-напросто не нужно. в конце концов, если вообще не писать BLL и не использовать всякие там глупые паттерны, будет ещё раз в 10 быстрей. что может быть быстрее лапши?

поражаете вы меня
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547501
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, а как Вы думаете почему вообще разделяют Model и ViewModel?

Например у меня в маленьком проекте одни и те же классы бизнес-логики используются как в десктоп админке, в MVC приложении, в API сервисе для интеграции с внешними системами, так и в сервисе для мобильных клиентов.
То есть части одной и той же доменной модели доступны абсолютно разным представлениям.

Вам оно может быть и не надо сейчас, но подумайте, что если завтра заказчик к сайту захочет ещё и сервис, отдающий JSON его партнёрам, а послезавтра ещё и экспортировать и ипортировать данные в формате XML?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547505
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttв конце концов, если вообще не писать BLL и не использовать всякие там глупые паттерны, будет ещё раз в 10 быстрей. что может быть быстрее лапши?+1

На фига вообще DAL, BLL? Из грида сразу в БД, фигли. Всего-то надо SqlDataSource прописать.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547510
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А вообще такие вопросы конечно доставляют. Сложно что-ли определение MVC (model-view-controller) хотя бы на Википедии прочитать?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547531
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVТак вот в чем вопрос - методы BLL должны использовать классы Model и в контроллере конвертить ViewModel в Model или же стразу ViewModel?Пройдёмся по определениям:ВикипедиЯ - Модель (англ. Model ). Модель предоставляет знания: данные и методы работы с этими данными, реагирует на запросы, изменяя своё состояние. Не содержит информации, как эти знания можно визуализировать .
...в объектно-ориентированном программировании используется активная модель MVC, где модельэто не только совокупность кода доступа к данным и СУБД, а вся бизнес-логика , следует отметить о возможности модели инкапсулировать в себе другие модели...

- Модель представления (англ. View Model ) является , с одной стороны, абстракцией Представления , а с другой, предоставляет обёртку данных из Модели, которые подлежат связыванию. То есть, она содержит Модель, которая преобразована к Представлению , а также содержит в себе команды, которыми может пользоваться Представление, чтобы влиять на Модель.
Ответ, думаю, очевиден.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547571
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAПарамон, а как Вы думаете почему вообще разделяют Model и ViewModel?

Понятие Model зависит от контекста, а ViewModel уже как то связана с View, логично? )

skyANAНапример у меня в маленьком проекте одни и те же классы бизнес-логики используются как в десктоп админке, в MVC приложении, в API сервисе для интеграции с внешними системами, так и в сервисе для мобильных клиентов.
То есть части одной и той же доменной модели доступны абсолютно разным представлениям.

Вам оно может быть и не надо сейчас, но подумайте, что если завтра заказчик к сайту захочет ещё и сервис, отдающий JSON его партнёрам, а послезавтра ещё и экспортировать и ипортировать данные в формате XML?

Для каждой выборки свой dto? А потом оно мапится в свои копии ака ViewModels?
Вот и представь, что в API сервисе нужно на одно поле меньше, значит в топку твой dto. А завтра в десктоп админке нужно приджойнить еще табличку, и где тут у нас "те же классы бизнес-логики"? Делаем новые, получаем перегруженные библиотеки с неявной ответственностью.

Или может быть, у вас все клиенты модели с идентичной и неизменной логикой? )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547587
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAНа фига вообще DAL, BLL? Из грида сразу в БД, фигли. Всего-то надо SqlDataSource прописать.
Вот кстати в ObjectDataSource по идее что передавать нужно? А GridView вообще отлично IQueryable кушает, это нормально?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547658
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонДля каждой выборки свой dto? А потом оно мапится в свои копии ака ViewModels?
Вот и представь, что в API сервисе нужно на одно поле меньше, значит в топку твой dto. А завтра в десктоп админке нужно приджойнить еще табличку, и где тут у нас "те же классы бизнес-логики"? Делаем новые, получаем перегруженные библиотеки с неявной ответственностью.

Или может быть, у вас все клиенты модели с идентичной и неизменной логикой? )

даже не смешно. что за детский лепет? какое ещё "на одно поле меньше"? что чушь вообще? как это относится к программированию?

DTO не мапится в "свою копию". оно мапится во ViewModel. и их полная идентичность -- это лишь частный случай, который не даёт право подсовывать DTO вместо ViewModel.

Model >= ViewModel, и не стоит делать "узкие кортежи" ради призрачной производительности. это глупо. выигрыша даже в 10мс вы не получите. ORM умеет офигенно кешировать. если мало, делается агрессивное кеширование там где это требуется. кстати, где это требуется, кортежи не помогут.

короче пппц. страшно представить что вы там накуралесили с такими "идеями".

учите матчасть. не ипайте мозг.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547684
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttDTO не мапится в "свою копию". оно мапится во ViewModel. и их полная идентичность -- это лишь частный случай, который не даёт право подсовывать DTO вместо ViewModel.

Кроме как "дает право" и "так нужно" ничего внятного от тебя не слышно.
Начнем с матчасти. )
Для каких нужд мы создаем DTO?

hVosttModel >= ViewModel, и не стоит делать "узкие кортежи" ради призрачной производительности. это глупо. выигрыша даже в 10мс вы не получите. ORM умеет офигенно кешировать. если мало, делается агрессивное кеширование там где это требуется. кстати, где это требуется, кортежи не помогут

Истинные джедаи всю модель выгружают в кеш, целиком. ))
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547707
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, мой репо может юзаться другими платформами, например, впф. Зачем мне в впф твои вью модели с привинченными атрибутами валидации? Ты предлагаешь в впф тянуть референс на мвц?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547716
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, МСУ, skyANA

А как быть если мне надо достать джоин 2х таблиц Table1 и Table2? как решается эта задача, учитывая что у меня только 2 класса в BLL Table1 и Table2?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547727
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVhVostt, МСУ, skyANA

А как быть если мне надо достать джоин 2х таблиц Table1 и Table2? как решается эта задача, учитывая что у меня только 2 класса в BLL Table1 и Table2?

Да хоть три

Код: c#
1.
2.
3.
4.
5.
6.
public class EmployeeDetail
{
    public Employee Employee { get; set; }
    public Department Department { get; set; }
    public IEnumerable<Check> Checks { get; set; }
}
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547737
Фотография МСУ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон4. Проблемы с List<GridItem> GetMyItems(bool isActive) пока не ясны )
Очень и очень плохая практика отдавать наружу реализацию списка, а не абстракцию (IList<T>, IEnumerable<T>). Абстракция описывает поведение, а список является реализацией этого поведения. Потребители могут захотеть иметь какую-то свою реализацию. Например, в впф мне нужна такая реализация - отслеживаемая коллекция ObservableCollection<T>. Поэтому, не нужно навязывать реализацию, правильнее отдать низкоуровневую абстракцию в угоду универсальности.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547744
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУT_STVhVostt, МСУ, skyANA

А как быть если мне надо достать джоин 2х таблиц Table1 и Table2? как решается эта задача, учитывая что у меня только 2 класса в BLL Table1 и Table2?

Да хоть три

Код: c#
1.
2.
3.
4.
5.
6.
public class EmployeeDetail
{
    public Employee Employee { get; set; }
    public Department Department { get; set; }
    public IEnumerable<Check> Checks { get; set; }
}


А это разве не ViewModel? Этот класс нужен конкретному интерфейсу.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547763
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
МСУПотребители могут захотеть иметь какую-то свою реализацию. Например, в впф мне нужна такая реализация - отслеживаемая коллекция ObservableCollection<T>. Поэтому, не нужно навязывать реализацию, правильнее отдать низкоуровневую абстракцию в угоду универсальности.
List просто говорит мне, что это уже готовые к употреблению данные.


МСУПарамон, мой репо может юзаться другими платформами, например, впф. Зачем мне в впф твои вью модели с привинченными атрибутами валидации? Ты предлагаешь в впф тянуть референс на мвц?
В принципе валидация менятся не должна. Можно вью модели вынести в отдельню сборку, не суть, мне такой вариант тоже не по вкусу.

Юзать один репо хорошо, в случае если впф и все остальные платформы имеют идентичную логику. На практике такое редко, обычно там покажи больше, здесь это лишнее и тд.
В итоге для каждой платформы разные срезы данных, dto для сервиса это не dto для впф.
Какой тогда профит от одной общей, избыточной библиотеки, если там каждый метод используется один раз?

Ну разве что инкапсуляция )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547826
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAПарамон, а как Вы думаете почему вообще разделяют Model и ViewModel?

Понятие Model зависит от контекста, а ViewModel уже как то связана с View, логично? )Не увиливайте от ответа. Контекст в названии и начале топика определён

ПарамонskyANAНапример у меня в маленьком проекте одни и те же классы бизнес-логики используются как в десктоп админке, в MVC приложении, в API сервисе для интеграции с внешними системами, так и в сервисе для мобильных клиентов.
То есть части одной и той же доменной модели доступны абсолютно разным представлениям.

Вам оно может быть и не надо сейчас, но подумайте, что если завтра заказчик к сайту захочет ещё и сервис, отдающий JSON его партнёрам, а послезавтра ещё и экспортировать и ипортировать данные в формате XML?

Для каждой выборки свой dto?1. У меня в Domain Model нет DTO, а полноценные бизне-объекты.
2. Что есть каждая выборка?

ПарамонА потом оно мапится в свои копии ака ViewModels?Да, это нормальная практика. Даже с примерами в книжках

ПарамонВот и представь, что...Хорошо себе представляю, т.к. продукт развивается вместе с предметной областью и требованиями бизнеса . Не вижу проблем.

P.S.: подумайте над тем, зачем я выделил жирным строчку.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547828
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAНа фига вообще DAL, BLL? Из грида сразу в БД, фигли. Всего-то надо SqlDataSource прописать.
Вот кстати в ObjectDataSource по идее что передавать нужно? А GridView вообще отлично IQueryable кушает, это нормально?Не могу отвтеить, так как ни разу не пользовался ObjectDataSource и IQueryable в представление не пробрасывал
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547835
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМСУПотребители могут захотеть иметь какую-то свою реализацию. Например, в впф мне нужна такая реализация - отслеживаемая коллекция ObservableCollection<T>. Поэтому, не нужно навязывать реализацию, правильнее отдать низкоуровневую абстракцию в угоду универсальности.
List просто говорит мне, что это уже готовые к употреблению данные.


МСУПарамон, мой репо может юзаться другими платформами, например, впф. Зачем мне в впф твои вью модели с привинченными атрибутами валидации? Ты предлагаешь в впф тянуть референс на мвц?
В принципе валидация менятся не должна. Можно вью модели вынести в отдельню сборку, не суть, мне такой вариант тоже не по вкусу.

Юзать один репо хорошо, в случае если впф и все остальные платформы имеют идентичную логику. На практике такое редко, обычно там покажи больше, здесь это лишнее и тд.
В итоге для каждой платформы разные срезы данных, dto для сервиса это не dto для впф.
Какой тогда профит от одной общей, избыточной библиотеки, если там каждый метод используется один раз?

Ну разве что инкапсуляция )Без конкретики спорить не имеет смысла. О какой предметной области идёт речь?

P.S.: лично я с избыточностью пока не сталкивался. Может потому, что не пытался запихнуть всё в ядро системы?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547838
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVhVostt, МСУ, skyANA

А как быть если мне надо достать джоин 2х таблиц Table1 и Table2? как решается эта задача, учитывая что у меня только 2 класса в BLL Table1 и Table2?А что лежит в этих таблицах? Как это связано с бизнес-логикой? Зачем делать джоин?

Очень часто используют Object-Relational Mapping, чтобы из реляционных данных получить бизнес-сущность.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547844
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA1. У меня в Domain Model нет DTO, а полноценные бизне-объекты.
2. Что есть каждая выборка?

Выборка, это когда мне нужно выбрать только два поля модели из 5 свзязанных таблиц. Такое бывает?

ПарамонP.S.: подумайте над тем, зачем я выделил жирным строчку.
Не знаю, красивое предложение? )

skyANAНе могу отвтеить, так как ни разу не пользовался ObjectDataSource и IQueryable в представление не пробрасывал

Вот пример )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547853
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANA1. У меня в Domain Model нет DTO, а полноценные бизне-объекты.
2. Что есть каждая выборка?
Выборка, это когда мне нужно выбрать только два поля модели из 5 свзязанных таблиц. Такое бывает?Не припомню.

Помню нужно было основную часть данных страницы вытащить из MongoDB, без компонентов и их настроек. А два поля из 5 таблиц. Нет, не было такого.

А как Вы решаете такие задачи? SELECT прям в коде страницы выполняете?

ПарамонskyANAP.S.: подумайте над тем, зачем я выделил жирным строчку. Не знаю, красивое предложение? )Не угадали

ПарамонskyANAНе могу отвтеить, так как ни разу не пользовался ObjectDataSource и IQueryable в представление не пробрасывал
Вот пример )А зачем он мне? Вам же был нужен.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547876
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА как Вы решаете такие задачи? SELECT прям в коде страницы выполняете?

Делаю класс с нужными полями (для меня это dto и viewmodel в одном флаконе), и передаю куда нужно.
На самом деле ViewModel я называю класс, который объединяет в себе несколько сущностей, нужных для комплексного представления.

Типа этого.
Код: c#
1.
2.
3.
4.
5.
6.
public class EmployeeViewModel
{
    public Employee Employee { get; set; }
    public Department Department { get; set; }
    public IEnumerable<Check> Checks { get; set; }
}
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38547936
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, и как он используется?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548134
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAT_STVhVostt, МСУ, skyANA

А как быть если мне надо достать джоин 2х таблиц Table1 и Table2? как решается эта задача, учитывая что у меня только 2 класса в BLL Table1 и Table2?А что лежит в этих таблицах? Как это связано с бизнес-логикой? Зачем делать джоин?

Очень часто используют Object-Relational Mapping, чтобы из реляционных данных получить бизнес-сущность.
Я имею в виду если мне в грид надо вынести джоин, чтобы пользователю было всё видо наглядно. А по поводу ORM - так у меня 2 объекта Table1 И Table2. Я же не буду тянуть всегда связь одной таблицы со всеми, на которые она ссылается.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548154
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STV, ещё раз: как это связано с бизнес-логикой?

То есть пользователь работал себе с "плоскими" данными и тут бац, оказалось, что нагляднее выводить JOIN?

Дайте больше конкретики: что в Table1, что в Table2? Почему на уровне DAL нельзя сделать JOIN и результат представить в виде объекта(ов) предметной области?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548217
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAT_STV, ещё раз: как это связано с бизнес-логикой?

То есть пользователь работал себе с "плоскими" данными и тут бац, оказалось, что нагляднее выводить JOIN?

Дайте больше конкретики: что в Table1, что в Table2? Почему на уровне DAL нельзя сделать JOIN и результат представить в виде объекта(ов) предметной области?
Давайте так. Есть классы:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class Category
{
    public int ID {get;set;}
    public string Name {get;set;}
}

public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public int CategoryID {get;set;}
}



Мне в грид надо вывести: Product.Name | Category.Name
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548245
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонList просто говорит мне, что это уже готовые к употреблению данные.

List ни о чём таком не говорит. это эффективная коллекция для использования в реализации, но никак не для обмена данными. для обмена нужно использовать что-нибудь из следующего:

IReadOnlyCollection<T>
IReadOnlyList<T>
IEnumerable<T>
ICollection<T>
IList<T>
Collection<T>

при чём экземпляр List проканает за любой из вышеописанных интерфейсов и обстракций.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548247
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STV, сразу бы так. А то Table1, Table2.

ИМХО должно быть так:
Код: c#
1.
2.
3.
4.
5.
6.
public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548257
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонВыборка, это когда мне нужно выбрать только два поля модели из 5 свзязанных таблиц. Такое бывает?

это ярый олдскул. бывает, но нафиг не нужно. over 90% уверенности, что это можно качественно зарефакторить и убрать "грязь". работа с чистой Domain моделью, это очень и очень хорошая концепция.

которая очень часто вступает в противоречие у людей, десятилетями привыкшими работать с чистым SQL (и которые наплодили столько говнокода, что по сей день не разгребсти). они берут теперь новые технологии (потому что, понимаешь, требование!) и продолжают колбасить в старом стиле, поклав на преимущства готовой к употреблению парадигмы. ладно бы ей было год-два от роду. так об этом столько написано-переписано, столько уже сказано-пересказано, столько человеко-часов опыта убито и выстрадано.

но нет же. продолжают бубнить одно да потому что "производительность, бла-бла-бла...", "меньше кода, бла-бла-бла..." было б хоть чего общего с реальностью. нет. всё дело в закостенелости мышления и привычки. не надо придумывать никаких глупых отговорок.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548280
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttList ни о чём таком не говорит. это эффективная коллекция для использования в реализации, но никак не для обмена данными. для обмена нужно использовать что-нибудь из следующего:

IReadOnlyCollection<T>
IReadOnlyList<T>
IEnumerable<T>
ICollection<T>
IList<T>
Collection<T>

Опять "нужно", "должен", внятно объясни зачем.
Допустим IEnumerable<T> может быть отложенный, но мне не нужен.
Пресловутой реализации тоже не будет.

skyANAПарамон, и как он используется?

Передается во view.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548289
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
hVosttПарамонВыборка, это когда мне нужно выбрать только два поля модели из 5 свзязанных таблиц. Такое бывает?
это ярый олдскул. бывает, но нафиг не нужно. over 90% уверенности, что это можно качественно зарефакторить и убрать "грязь". работа с чистой Domain моделью, это очень и очень хорошая концепция.
Предлагаешь тащить данные на все поля 5 сущностей? Ты там чего укурился?

Задача классическая, решается элементарно.

Если мне нужно только Product.Name и Category.Name, я отдают Product с заполненными Name и Category.Name, остальное всё пустое. Тем самым из базы я тяну только 2 поля!

Код: c#
1.
2.
3.
4.
5.
6.
public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}



Хвост, ты меня просто поражаешь.

Если структура такая (почему бы и нет)

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
public class Category
{
    public int ID {get;set;}
    public string Name {get;set;}
}

public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public int CategoryID {get;set;}
}



тоже самое, я беру из базы только 2 поля, намаплимаю на свою расширенную модель ProductInfo и отдаю в выхлоп.

public class ProductInfo
{
public Product Product {get;set;}
public Category Category {get;set;}
}

Будут заполнены только ProductInfo.Product.Name и ProductInfo.Category.Name
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548302
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttэто ярый олдскул. бывает, но нафиг не нужно. over 90% уверенности, что это можно качественно зарефакторить и убрать "грязь". работа с чистой Domain моделью, это очень и очень хорошая концепция.

которая очень часто вступает в противоречие у людей, десятилетями привыкшими работать с чистым SQL (и которые наплодили столько говнокода, что по сей день не разгребсти). они берут теперь новые технологии (потому что, понимаешь, требование!) и продолжают колбасить в старом стиле, поклав на преимущства готовой к употреблению парадигмы. ладно бы ей было год-два от роду. так об этом столько написано-переписано, столько уже сказано-пересказано, столько человеко-часов опыта убито и выстрадано.

но нет же. продолжают бубнить одно да потому что "производительность, бла-бла-бла...", "меньше кода, бла-бла-бла..." было б хоть чего общего с реальностью. нет. всё дело в закостенелости мышления и привычки. не надо придумывать никаких глупых отговорок.
Слезь с броневичка, не на митинге )
Нахватался умных слов, которые не совсем понимаешь.
Что такое Domain модель в твоем понимании, какие у нее цели?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548316
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAПарамон, и как он используется?

Передается во view.А как данными заполняется? Напрямую из БД, минуя BLL и DAL?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548320
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкотоже самое, я беру из базы только 2 поля, намаплимаю на свою расширенную модель ProductInfo и отдаю в выхлоп.

public class ProductInfo
{
public Product Product {get;set;}
public Category Category {get;set;}
}

Будут заполнены только ProductInfo.Product.Name и ProductInfo.Category.Name

Можно пример кода как Вы достаёте только нужные поля?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548324
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVмсущкотоже самое, я беру из базы только 2 поля, намаплимаю на свою расширенную модель ProductInfo и отдаю в выхлоп.

public class ProductInfo
{
public Product Product {get;set;}
public Category Category {get;set;}
}

Будут заполнены только ProductInfo.Product.Name и ProductInfo.Category.Name

Можно пример кода как Вы достаёте только нужные поля?За него это ORM делает :)
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548328
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STV, а какие проблемы получить одним запросом данные для объекта сл. типа:
Код: c#
1.
2.
3.
4.
5.
6.
public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}

?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548389
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAT_STV, а какие проблемы получить одним запросом данные для объекта сл. типа:
Код: c#
1.
2.
3.
4.
5.
6.
public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}

?
А зачем мне тянуть Категории если они мне например совсем не нужны. А если там будет 100 ссылок на другие сущности?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548398
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAА как данными заполняется? Напрямую из БД, минуя BLL и DAL?
DAL у меня это EF.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548519
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонСлезь с броневичка, не на митинге )
Нахватался умных слов, которые не совсем понимаешь.
Что такое Domain модель в твоем понимании, какие у нее цели?

объектная модель, объединящая данные и поведение.

и вообще

говоришь умные вещи -- "нахватался умных слов"

говоришь глупости -- "иди четай что умные люди пишут"

при чем тут броневичок. просто аргументы "производительность" и "меньше кода" -- очевидная глупость.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548523
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVА зачем мне тянуть Категории если они мне например совсем не нужны. А если там будет 100 ссылок на другие сущности?

добавьте после слова public и не парьте мозги. ваши категории будут подтягиваться только тогда, когда вы к ним обратитесь. есть и другие способы контроллировать количество получаемой информации. кроме того, на счёт этого особенно беспокоиться не нужно. откуда конкретный метод контроллера знает, что категории не нужны? это его не должно вообще парить.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548524
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttдобавьте после слова public

* .. слово virtual
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548547
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttT_STVА зачем мне тянуть Категории если они мне например совсем не нужны. А если там будет 100 ссылок на другие сущности?

добавьте после слова public и не парьте мозги. ваши категории будут подтягиваться только тогда, когда вы к ним обратитесь. есть и другие способы контроллировать количество получаемой информации. кроме того, на счёт этого особенно беспокоиться не нужно. откуда конкретный метод контроллера знает, что категории не нужны? это его не должно вообще парить.
BLL у нас будет возвращать IEnumerable, а не IQueryable. Что значит будут подтягиваться когда нужны? А контроллер я пишу для конкретного View и я знаю что надо во вью а что нет (по крайней мере на текущий момент). А нафига я буду вытаскивать сотни сущностей, если они не используются?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548551
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
T_STVмсущкотоже самое, я беру из базы только 2 поля, намаплимаю на свою расширенную модель ProductInfo и отдаю в выхлоп.

public class ProductInfo
{
public Product Product {get;set;}
public Category Category {get;set;}
}

Будут заполнены только ProductInfo.Product.Name и ProductInfo.Category.Name

Можно пример кода как Вы достаёте только нужные поля?

Для такого класса

Код: c#
1.
2.
3.
4.
5.
public class ProductInfo
{
    public string ProductName { get; set; }
    public string CategoryName { get; set; }
}



Код: c#
1.
2.
IEnumerable<ProductInfo> list = ctx.Products.Join(ctx.Categories, p => p.CategoryId, c => c.CategoryId, (p, c) => 
    new ProductInfo { ProductName = p.Name, CategoryName = c.Name }).ToList();



Для такого класса

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public class ProductInfo
{
    public ProductInfo(string productName, string categoryName)
    {
        Product = new Product { Name = productName };
        Category = new Category { Name = categoryName };
    }

    public Product Product { get; set; }
    public Category Category { get; set; }
}



Код: c#
1.
2.
IEnumerable<ProductInfo> list = ctx.Products.Join(ctx.Categories, p => p.CategoryId, c => c.CategoryId, (p, c) =>
               new { ProductName = p.Name, CategoryName = c.Name }).ToList().Select(x => new ProductInfo(x.ProductName, x.CategoryName));
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548572
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVBLL у нас будет возвращать IEnumerable, а не IQueryable. Что значит будут подтягиваться когда нужны? А контроллер я пишу для конкретного View и я знаю что надо во вью а что нет (по крайней мере на текущий момент). А нафига я буду вытаскивать сотни сущностей, если они не используются?

еще раз повторю. добавите слово virtual. тащиться ничего не будет. как только вы обратитесь к полю Category, прокси-класс вытащит вам категорию из базы. всё просто.

а все эти поигрушки с заменой IQueryable и IEnumerable действительно бессмысленные (ооо! я спрятал DAL и его IQueryable за IEnumerable... даже не смешно). хотите коллекцию? дайте честную коллекцию вида IReadOnlyCollection/ICollection/IList/etc.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548573
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
T_STVskyANAT_STV, а какие проблемы получить одним запросом данные для объекта сл. типа:
Код: c#
1.
2.
3.
4.
5.
6.
public class Product
{
    public int ID {get;set;}
    public string Name {get;set;}
    public Category Category {get;set;}
}

?
А зачем мне тянуть Категории если они мне например совсем не нужны.Выбрать имя категории подзапросом по её идентифкатору - это не проблема.
Проблема когда от стороннего сервиса прилетает один идентификатор, а чтобы отобразить имя, то нужно посылать отдельный запрос этому сервису.
Хотя и это не проблема: загружаем одним запросом справочники, кладём в кэш и дальше ничего тянуть не надо.

T_STVА если там будет 100 ссылок на другие сущности?Вы сейчас на ходу придумываете, или у Вас реально в таблице 100 внешних ключей?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548580
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANA,

это из области "нафига казе баян?". использовать ОРМ, чтобы потом всеми силами бороться с ним
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548581
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt, интерфейс IReadOnlyCollection появился в .Net Framework 4.5 :)
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548583
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttобъектная модель, объединящая данные и поведение

Заучивание предложений из букваря конечно полезно, но хорошо бы и понимание включать. )

hVosttпросто аргументы "производительность" и "меньше кода" -- очевидная глупость.
Вопросов больше нет )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548586
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttskyANA,

это из области "нафига казе баян?". использовать ОРМ, чтобы потом всеми силами бороться с ним А кто и где использует ОРМ?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548589
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAА как данными заполняется? Напрямую из БД, минуя BLL и DAL?
DAL у меня это EF.EF напрямую дёргается в контроллере (в коде страницы)?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548608
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAhVostt, интерфейс IReadOnlyCollection появился в .Net Framework 4.5 :)

знамо. но это правильный интерфейс, жаль что так поздно появился.

ПарамонЗаучивание предложений из букваря конечно полезно, но хорошо бы и понимание включать. )

что не так с пониманием? личный опыт с использованием классов BLL во View был. давненько, даж удивлялся, нафига люди себе лишний гемморой изобретают, какие-то вью модели пишут. вот ведь придурки.

собственно, тепреь опыта стало больше, понимание пришло вместе с ним. как я уже сказал, площадь зависимости должна быть как можно меньше. это играет очень большую роль при разработке и сопровождении. на производительность вытягивание целых моделей не влияет, проверено опытным путём. больше кода? вовсе наоборот. разрабатывать и дорабатывать вью можно полностью независимо от BLL. из BLL во вью не попадают технические поля, и данные которые там просто не нужны. только то, что нужно для отображения. каждая вью берёт своё. а из BLL берётся модель. целиком. никаких проблем.

если же ваш командный опыт показывает обратное, ну чтож... дело сугубо ваше. но я лично так рассуждал года 3 назад.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548622
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAEF напрямую дёргается в контроллере (в коде страницы)?
Бывает в контроллере, бывает выношу в отдельные классы или сборки, зависит от.
Какую проблематичность в этом наблюдаете?
Начнем с кода страницы. )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548638
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ПарамонskyANAEF напрямую дёргается в контроллере (в коде страницы)?
Бывает в контроллере, бывает выношу в отдельные классы или сборки, зависит от.
Какую проблематичность в этом наблюдаете?
Начнем с кода страницы. )
Пецдетс... Друх, яд стоит на полке. Как можно писать код с такой кашей в голове, как у тебя?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548649
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttразрабатывать и дорабатывать вью можно полностью независимо от BLL.
Что значит разрабатывать и дорабатывать вью и какие проблемы возникают без DDD подхода?

hVosttиз BLL во вью не попадают технические поля, и данные которые там просто не нужны. только то, что нужно для отображения. каждая вью берёт своё. а из BLL берётся модель. целиком

Что случится если во вью попадут эти данные?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548658
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоПецдетс... Друх, яд стоит на полке. Как можно писать код с такой кашей в голове, как у тебя?
Вы меня вразумите, объясните что да почему, яд и каша это не метод )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548670
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЧто значит разрабатывать и дорабатывать вью и какие проблемы возникают без DDD подхода?

это значит, что изменения в BLL придётся ловить сначало в контроллерах, потом во вью. спрашивается. оно вам надо?

ПарамонЧто случится если во вью попадут эти данные?

может случиться, что они могут быть отображены, а также могут быть испорчены, при возврате из вью. например, генераторы форм, которые берут тип модели и её атрибуты -- сразу отпадают. отпадает всякие гарантии, что во вью находится исключительно только то, что ей надо и ничего лишнего. лапша не лапша...
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548705
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttПарамонЧто значит разрабатывать и дорабатывать вью и какие проблемы возникают без DDD подхода?

это значит, что изменения в BLL придётся ловить сначало в контроллерах, потом во вью. спрашивается. оно вам надо?

Если ViewModel приходит сразу из БЛ, что там ловить в контроллере и вью?

hVosttможет случиться, что они могут быть отображены, а также могут быть испорчены, при возврате из вью.
Неубедительно. Отображено может быть только то что я хотел показать, испортить можно и в БЛ.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548713
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAEF напрямую дёргается в контроллере (в коде страницы)?
Бывает в контроллере, бывает выношу в отдельные классы или сборки, зависит от.От чего? От настроения?

Через год спрашивают: почему тут такой подход, тут сякой, тут пятый, тут десятый?
Ответ: нууу... настроение было такое.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548719
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
мсущкоДля такого класса

Код: c#
1.
2.
3.
4.
5.
public class ProductInfo
{
    public string ProductName { get; set; }
    public string CategoryName { get; set; }
}



Это разве не ViewModel? У Вас в BLL кастомный класс, который нужен конкретной реализации интерфейса.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548721
T_STV
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAT_STVпропущено...

А зачем мне тянуть Категории если они мне например совсем не нужны.Выбрать имя категории подзапросом по её идентифкатору - это не проблема.
Проблема когда от стороннего сервиса прилетает один идентификатор, а чтобы отобразить имя, то нужно посылать отдельный запрос этому сервису.
Хотя и это не проблема: загружаем одним запросом справочники, кладём в кэш и дальше ничего тянуть не надо.

T_STVА если там будет 100 ссылок на другие сущности?Вы сейчас на ходу придумываете, или у Вас реально в таблице 100 внешних ключей?
На текущем проекте такого нет, но я встречал таблицы со 150ю полями. около сотни ссылочные.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548723
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
что касается производительности.

кейс №1. допустим, у нас есть объект Организация, которая характеризуется рядом полей, типа Название, Полное наименование ЮЛ, краткое наименование ЮЛ, всякие налоговые коды, и т.д.

в одном месте нам понадобилось вывести список Названий организаций. в другом Название и Наименование ЮЛ, в третьем адреса и телефоны. и т.д. если делать запросы кортежами по логике "чего хочет вью", то получим десятки и сотни разных запросов по сути одного и того же.

вместо того, чтобы СУБД, ОРМ и приложение могли закешировать всего лишь один срез данных, будет много бессмысленной грязи, в угоду наивной попытки сэкономить на объёме данных. обычные нагрузочные не показывают сколько нибудь значимой эффективности, однако нагрузка на СУБД в итоге только возрастает.

кейс №2. сегодня во вью надо отобразить список названий организаций. для этого в BLL нарисовали специальный класс кортежа, и в запросе к СУБД получилось ID, Name.

и тут заказчику, оказывается, надо ещё отобразить рядышком ОГРН. что делать? лезем в BLL, меняем кортеж. отыскиваем нужный вью и меняем там. все надо пересобирать, и все другие приложения использующие BLL тоже. короче, достанется абсолютно всем. круто!

в ином случае, достаточно во ViewModel добавить злосчастное поле, и всё будет в ажуре. BLL трогать не пришлось. оно как возвращало коллекцию Организаций, так и продолжает её возвращать.

естественно, бывают случаи и по сложнее. но зачем создавать себе лишние сложности там, где сразу можно их избежать?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548750
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонЕсли ViewModel приходит сразу из БЛ, что там ловить в контроллере и вью?

во первых, весь проект с контроллером надо будет пересобрать. как минимум. во вью произвести изменения в соответствии с изменившимся классом.

ты походу троллишь меня с изрядным удовольствием? очевидно, что такой подход полнейший идиотизм. писец, хренли тут ещё объяснять? среди продвинутых школьников и то можно обнаружить, тех кто это прекрасно понимает.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548764
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
T_STVмсущкоДля такого класса

Код: c#
1.
2.
3.
4.
5.
public class ProductInfo
{
    public string ProductName { get; set; }
    public string CategoryName { get; set; }
}



Это разве не ViewModel? У Вас в BLL кастомный класс, который нужен конкретной реализации интерфейса.
Нет это доменный объект. Может содержать и логику. Учи матчасть и паттерны уже...

Вот вьюмодель:

public class ProductViewModel: IDataErrorInfo, IValidatableObject
{
[Required]
[Display(Name = "Название")]
public string Title { get; set; }

[Required]
[Display(Name = "Название")]
[StringLength(100, ErrorMessage = "Длина значения поля \"Название продукта\" не должна первышать 100")]
public string ProductName { get; set; }

[Display(Name = "Выберите тип из списка")]
public int? SelectedTypeId { get; set; }

public IEnumerable<Types> ProductTypes { get; set; }

// Обновить фото продукта
[HiddenInput(DisplayValue = false)]
public System.Web.HttpPostedFileBase File { get; set; }

public string Error
{
get { return null; }
}

public string this[string columnName]
{
get { return null; }
}

public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
{
var results = new List<ValidationResult>();
if (SelectedTypeId.HasValue)
{
Validator.TryValidateProperty(SelectedTypeId, new ValidationContext(this, null, null) { MemberName = "SelectedTypeId" }, results);
if (SelectedTypeId >= 100)
{
results.Add(new ValidationResult("Выбор такого типа заблокирован"));
}
}

return results;
}
}
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38548768
мсущко
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
T_STVмсущкоДля такого класса

Код: c#
1.
2.
3.
4.
5.
public class ProductInfo
{
    public string ProductName { get; set; }
    public string CategoryName { get; set; }
}



Это разве не ViewModel? У Вас в BLL кастомный класс, который нужен конкретной реализации интерфейса.
Нет это доменный объект. Может содержать и логику.

Вот вьюмодель:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
public class ProductViewModel: IDataErrorInfo, IValidatableObject
{
    [Required]
    [Display(Name = "Название")]
    public string Title { get; set; }

    [Required]
    [Display(Name = "Название")]
    [StringLength(100, ErrorMessage = "Длина значения поля \"Название продукта\" не должна первышать 100")]
    public string ProductName { get; set; }

    [Display(Name = "Выберите тип из списка")]
    public int? SelectedTypeId { get; set; }

    public IEnumerable<Types> ProductTypes { get; set; }

    // Обновить фото продукта
    [HiddenInput(DisplayValue = false)]
    public System.Web.HttpPostedFileBase File { get; set; }

    public string Error
    {
        get { return null; }
    }

    public string this[string columnName]
    {
        get { return null; }
    }

    public IEnumerable<ValidationResult> Validate(ValidationContext validationContext)
    {
        var results = new List<ValidationResult>();
        if (SelectedTypeId.HasValue)
        {
            Validator.TryValidateProperty(SelectedTypeId, new ValidationContext(this, null, null) { MemberName = "SelectedTypeId" }, results);
            if (SelectedTypeId >= 100)
            {
                results.Add(new ValidationResult("Выбор такого типа заблокирован"));
            }
        }

        return results;
    }
}
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549063
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОт чего? От настроения?

Через год спрашивают: почему тут такой подход, тут сякой, тут пятый, тут десятый?
Ответ: нууу... настроение было такое.

Тоже фантазировать начал?
Есть конкретные соображения. )
Например повторное использование, или разргрузить логику, поднять уровень абстракции и тд.

Трезвая критика кода в странице будет, или только пустой звук и куча вопросов? )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549076
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAОт чего? От настроения?

Через год спрашивают: почему тут такой подход, тут сякой, тут пятый, тут десятый?
Ответ: нууу... настроение было такое.

Тоже фантазировать начал?
Есть конкретные соображения. )
Например повторное использование, или разргрузить логику, поднять уровень абстракции и тд.

Трезвая критика кода в странице будет, или только пустой звук и куча вопросов? )Сначала я хочу понять твою позицию, а потом уже будет критика.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549085
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон...разргрузить логику...То есть встречаются страницы, где логика и доступ к данным в одном классе, в классе страницы, так?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549260
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAТо есть встречаются страницы, где логика и доступ к данным в одном классе, в классе страницы, так?
Вот, критикуй :)

SELECT * не трогать, hVostt сказал это нормуль. )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549479
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонskyANAТо есть встречаются страницы, где логика и доступ к данным в одном классе, в классе страницы, так?
Вот, критикуй :)

SELECT * не трогать, hVostt сказал это нормуль. )А, так Вы учебные примеры разрабатываете.
Тут критика бесполезна, так как упрётся в "это учебный пример, тут этого не нужно".
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549532
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt... естественно, бывают случаи и по сложнее. но зачем создавать себе лишние сложности там, где сразу можно их избежать?
Если у Вас несколько миллионов посетителей в день и сотни тысяч продаж то Вы каждое поле будете "вылизывать" и вдумчиво добавлять в кэш который как оказывается не резиновый и не очень хорошо масштабируется при таком объеме данных и скорости обработки...

За последнее время позиция Microsoft сильно изменилась в этом вопросе - они уже никому не навязывают n-tier application. Уровней абстракций должно быть ровно столько, чтобы Ваш проект приносил прибыль, а не служил реализацией чьих-то идей, рожденных в bedrooms...

Так что все мнения имеют право на жизнь и каждый зарабатывает себе на жизнь как умеет
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549587
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey ChЕсли у Вас несколько миллионов посетителей в день и сотни тысяч продаж то Вы каждое поле будете "вылизывать" и вдумчиво добавлять в кэш который как оказывается не резиновый и не очень хорошо масштабируется при таком объеме данных и скорости обработки...

ой начинается, полезли примерчики из фантазий про фейсбук... если у ВАС там несколько миллионов посетителей в день и сотни тысяч продаж, то говнокодить вам никто не даст, сразу под зад и на биржу, наберут в штат грамотных архитекторов, программистов, дизайнеров, маркетолоков, поливальщиков цветов, а весь текущий тред туда не упирался ни одним местом.

Sergey ChЗа последнее время позиция Microsoft сильно изменилась в этом вопросе - они уже никому не навязывают n-tier application. Уровней абстракций должно быть ровно столько, чтобы Ваш проект приносил прибыль, а не служил реализацией чьих-то идей, рожденных в bedrooms...

высказывание ни о чём. хорошо когда хорошо. плохо когда плохо.

Sergey ChТак что все мнения имеют право на жизнь и каждый зарабатывает себе на жизнь как умеет

право на жизнь или ещё на что-то там не всегда реализуется, таковы законы природы и рынка
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549589
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонSELECT * не трогать, hVostt сказал это нормуль. )

забуть про SELECT *

SELECT <весь набор полей>
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549892
Sergey Ch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt... если у ВАС там несколько миллионов посетителей в день и сотни тысяч продаж, то говнокодить вам никто не даст, сразу под зад и на биржу, наберут в штат грамотных архитекторов, программистов, дизайнеров, маркетолоков, поливальщиков цветов, а весь текущий тред туда не упирался ни одним местом...
Как же Вы далеки от реальных проектов....

Улыбнуло
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549947
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey ChhVostt... если у ВАС там несколько миллионов посетителей в день и сотни тысяч продаж, то говнокодить вам никто не даст, сразу под зад и на биржу, наберут в штат грамотных архитекторов, программистов, дизайнеров, маркетолоков, поливальщиков цветов, а весь текущий тред туда не упирался ни одним местом...
Как же Вы далеки от реальных проектов....

Улыбнуло То есть в реальных проектах говнокодят, а не поля "вылизывают"? :)

ТСу Вы что посоветуете?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38549977
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Sergey ChКак же Вы далеки от реальных проектов....

Улыбнуло

вЫ не представляете, на сколько! занят только на фанастически нереальных проектах
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550059
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttSELECT <весь набор полей>
Одна модель может выглядеть так, не вопрос )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550061
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
skyANAОт чего? От настроения?
skyANAА, так Вы учебные примеры разрабатываете.
skyANAТо есть в реальных проектах говнокодят, а не поля "вылизывают"?
Шерлок Холмс отдыхает ))
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550117
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, Вы смайлики везде добавляете и я иронизирую. Низзя?
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550147
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонОдна модель может выглядеть так, не вопрос )

справочники, справочники, справочники... де нормальная нормальзация? да, сорри за тофтоологию )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550270
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttсправочники, справочники, справочники... де нормальная нормальзация? да, сорри за тофтоологию )
Все нормализовано, в школе модели из трёх полей в основном? )

skyANAи я иронизирую. Низзя?

Иронизировать можно, передергивать нет. )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550277
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Парамон, о чём это Вы? :)
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550340
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttсправочники, справочники, справочники... де нормальная нормальзация? да, сорри за тофтоологию )
Все нормализовано, в школе модели из трёх полей в основном? )

Я бы поспорил на счёт этого. Картинка маленькая, видимо стыдно за архитектурный дизайн ;)
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550441
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVosttЯ бы поспорил на счёт этого. Картинка маленькая, видимо стыдно за архитектурный дизайн ;)
Там ведь просто названия полей, которые я не хотел светить. Маленькая часть модели, типов нет, реальной картины не видно, что даст увеличение? )

Покажи может свою, я хоть гляну как у реальных парней? )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550518
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонМаленькая часть модели

а, ну если так... предпочитаю нормализацию, снижая количество полей в таблице до минимума. не до 2-3 конечно, но и не 15-20 -- это кошмар. конечно, с таким подходом надо костылями вовсю размахивать, плодя кортежи как кроликов. максимальная декомпозиция и нормализация раскрывают истиный потенциал модели, которая обходится без костылей и костыликов :) хотя уж всё от задачи зависит, от постановщика и от людей в команде. кто-то любит SQL-и писать, аж хрен оттащишь.
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550545
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонhVosttЯ бы поспорил на счёт этого. Картинка маленькая, видимо стыдно за архитектурный дизайн ;)
Там ведь просто названия полей, которые я не хотел светить. Маленькая часть модели, типов нет, реальной картины не видно, что даст увеличение? )

Покажи может свою, я хоть гляну как у реальных парней? )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550567
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
hVostt15-20 -- это кошмар.
Детсадовский ужос. )

Видел и любителей связи 1:1. )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550584
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Эту я тут уже видел )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550590
Парамон
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ViPRos,

Сча hVostt нормализует на скоряк )
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550599
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонViPRos,

Сча hVostt нормализует на скоряк )
невозможно, ВИПРОС автоматом все нормализовывает да беспредела
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550607
ViPRos
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
а потом дает "денормализовать", персистентно или виртуально
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38550658
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ПарамонДетсадовский ужос. )

Видел и любителей связи 1:1. )

любить или не любить связи это одно. хотя связи это хорошо

на 1:1, кстати, в EF реализуется один из способов наследования. правда это мегавзрывоопасная штука. лучше не использовать, или о-о-ооочень осторожно
...
Рейтинг: 0 / 0
BLL работает с Model или ViewModel?
    #38551228
Фотография hVostt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Что такое? Почему асп.нет нет в топе? А ну-ка быстро все набежали и устроили лютый срач!
...
Рейтинг: 0 / 0
109 сообщений из 109, показаны все 5 страниц
Форумы / ASP.NET [игнор отключен] [закрыт для гостей] / BLL работает с Model или ViewModel?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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