Как наилучшим образом отобразить типы объектов с учетом базы данных между уровнями приложения - PullRequest
1 голос
/ 16 декабря 2009

У меня есть приложение ASP.NET MVC с примитивным уровнем хранилища, которое в настоящее время передает сущности LINQ to SQL обратно в контроллеры, которые затем отправляют их в представления. Теперь я хочу начать использовать некоторые объектно-ориентированные объекты вместо сущностей LINQ to SQL, и я использую AutoMapper, чтобы помочь в этом. Для простого сопоставления свойства-свойства это удобно и тривиально просто, но теперь я столкнулся с проблемой сопоставления сущностей, которые сами содержат только текст шаблона и соединение с базой данных и информацию запроса. Я хотел бы сопоставить эти шаблонные типы источников с полностью замененными токенами типами назначения.

Например, у меня есть тип источника и назначения ...

public class Source
{
    public int Id { get; set; }
    public string MarkupTemplate { get; set; }
    public string DatabaseConnectionString { get; set; }
    public string DatabaseQuery { get; set; }
}

public class Destination
{
    public int Id { get; set; }
    public string Value { get; set; }
}

Исходный объект может выглядеть примерно так:

var source = new Source() {
    Id = 123,
    MarkupTemplate = "The %noun% is %adjective%.",
    DatabaseConnectionString = "Some SQL Server conn string",
    DatabaseQuery = "SELECT noun, adjective FROM things WHERE id=@id"
}

Во время картирования (или в другом месте, если это имеет смысл сделать ... Я открыт для предложений!) Мне нужно:

  1. Подключиться к базе данных, описанной в свойстве DatabaseConnectionString источника.
  2. Выполните запрос на выборку, который находится в свойстве DatabaseQuery источника, чтобы получить одну запись.
  3. Заменить токены, входящие в значение MarkupTemplate источника, значениями, найденными в записи, возвращенной из базы данных.
  4. Поместите замененный токеном контент в свойство Value назначения. В приведенном выше примере объекта source свойство Value назначения должно содержать «Автомобиль красного цвета». если запрос к базе данных возвращает «car» и «red» для существительного и прилагательного.

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

...