У меня есть двоичные данные в моей базе данных, которые в какой-то момент мне придется преобразовать в растровое изображение. Я думал, уместно ли использовать репозиторий и делать это там. Мой потребитель, который является уровнем представления, будет использовать этот репозиторий. Например:
// This is a class I created for modeling the item as is.
public class RealItem
{
public string Name { get; set; }
public Bitmap Image { get; set; }
}
public abstract class BaseRepository
{
//using Unity (http://unity.codeplex.com) to inject the dependancy of entity context.
[Dependency]
public Context { get; set; }
}
public calss ItemRepository : BaseRepository
{
public List<Items> Select()
{
IEnumerable<Items> items = from item in Context.Items select item;
List<RealItem> lst = new List<RealItem>();
foreach(itm in items)
{
MemoryStream stream = new MemoryStream(itm.Image);
Bitmap image = (Bitmap)Image.FromStream(stream);
RealItem ritem = new RealItem{ Name=item.Name, Image=image };
lst.Add(ritem);
}
return lst;
}
}
Это правильный способ использования шаблона хранилища? Я изучаю этот шаблон, и я видел много примеров в Интернете, которые используют репозиторий, но когда я посмотрел на их исходный код ... например:
public IQueryable<object> Select
{
return from q in base.Context.MyItems select q;
}
Как вы можете видеть, в их подход к системе практически не добавляется поведение, за исключением скрытия запроса доступа к данным, поэтому я был озадачен тем, что, возможно, хранилище - это нечто другое, и я все понял неправильно. В конце должны быть дополнительные преимущества их использования, верно?
Обновление: оказалось, что вам не нужны репозитории, если с данными ничего не нужно делать перед их отправкой, но подождите! нет абстракции по запросу LINQ? Таким образом, клиент должен предоставить нам операторы запросов, которые могут быть немного небезопасными и трудными для проверки, поэтому, возможно, хранилище также предоставляет абстракцию для запросов данных? если это правда, то наличие репозитория всегда является необходимой потребностью в архитектуре проекта !! однако эта абстракция может быть предоставлена с помощью хранимых процедур SQL. какой выбор, если доступны оба варианта?