Для фона у меня есть слой данных и сервисный слой, свободно основанные на модели магазина Роба Конери, и, как и у Роба, многие из моих доменных объектов и объединены LazyList<>
и LazyItem<>
использовать отложенное выполнение, которое предоставляет Linq2Sql, учитывая, что мои типы Lazy*
используют IQueryable<T>
, а не , этот потрясающий делегатский подход .
Итак, у меня есть такой граф объектов (в основном, у каждого занятия должна быть фотогалерея множества изображений - миниатюр и полноразмерных фотографий):
latest3Activities[0].Gallery.Images.Inner[1].FullImage
Тип Gallery
имеет свойство Images LazyList<PhotoGalleryImage>
, поэтому IList<PhotoGalleryImage>
из этого LazyList - это Inner
, который вы видите. Каждый элемент PhotoGalleryImage
имеет свойство FullImage
и свойство Thumbnail
, оба типа Image
.
Идея состоит в том, что полностью загруженная фотография рез хранится в свойстве PhotoGalleryImage.FullImage
, и изначально свойство Thumbnail
имеет значение Null
.
Что мне нужно, так это: когда к свойству Thumbnail
обращаются в первый раз, если это Null
, я хочу, чтобы мой слой Service генерировал Thumb, сохранил его в БД, а затем вернул экземпляр Image
что меньше фото. У меня есть весь код для создания миниатюры из полноразмерного изображения, так что здесь вопрос не в этом.
То, что я не могу понять, это как поймать первый доступ к свойству Thumbnail
(в контексте моей архитектуры IQueryable<>
), а затем сделать так, чтобы уровень обслуживания выполнял изменение размера, а не хранилища (DAL). Я твердо убежден, что сервисный (бизнес) уровень должен отвечать за это функциональное решение, но я не понимаю, как заставить его работать.
В настоящее время я думаю, что сопоставление классов моего домена в репозиториях с классами Linq2Sql было бы хорошим местом для определения этого «первого доступа», на который я ссылаюсь, но я не вижу, как нижний уровень может затем вызвать в слой Service и выполнить сжатие (или даже если это возможно, что он должен ).
Может быть, мой дизайн заставляет меня делать Repos преобразованием. Может быть, я не хочу, чтобы сервисный уровень вообще выполнял эту логику. Возможно, мой дизайн настолько ужасен, что мне вообще не стоит сталкиваться с этим беспорядком.
Пожалуйста, помогите. Все отзывы приветствуются.