Как значения поиска должны быть представлены в бизнес-объектах ASP.NET? - PullRequest
0 голосов
/ 25 марта 2011

В настоящее время я пишу N-уровневую архитектуру системы ASP.NET с относительно нормализованным внутренним интерфейсом базы данных SQL, но я пытаюсь понять, как следует искать значения в моих бизнес-объектах (я не получить привилегию использования EF или ORM). Моя таблица (в качестве примера) может быть структурирована так:

CoreDataTable:

ID | Name  | Favourite_Colour
---|-------|-----------------
01 | Peter | 01
02 | John  | 03
03 | Mary  | 05

ColoursLookup:

ID | Colour | is_active
---|--------|----------
01 | Red    | 1
02 | Green  | 1
03 | Blue   | 1
04 | Pink   | 1
05 | Black  | 1

Теперь изначально я создал свой бизнес-объект, который будет выглядеть следующим образом:

public class Person
{
    protected int PersonID { get; set; }
    public string Name { get; set; }
    public int FavouriteColour { get; set; }
}

Но что мне делать, когда, например, я хочу перечислить всех людей в базе данных вместе с их любимым цветом? Я не могу показать только идентификатор поиска, поэтому в минуту я вижу 4 варианта:

  1. Добавить метод к классу с именем Person.GetColourStringValue, который получает имя цвета из базы данных при вызове. Это было бы неэффективно, поскольку использование этого метода на 100 объектах «Person» привело бы к 100 запросам к базе данных.
  2. Имейте свойство FavouriteColour объекта Person в виде строки и выполняйте обратный поиск всякий раз, когда записываете объект person в базу данных (то есть берете имя цвета и получаете соответствующий идентификатор). Это опасно для ИМО в маловероятном случае, когда два цвета имеют одно и то же имя в базе данных.
  3. Сохраните идентификатор и значение в объекте Person и синхронизируйте их всякий раз, когда обновляется одно или другое значение. Это кажется слишком сложным для относительно тривиальной задачи.
  4. Создайте два представления: объект Person и объект PersonSummary, который возвращает версию объекта только для чтения со всеми значениями поиска, преобразованными в их описательные имена.

Я на 100% убежден, что я (а) переосмысливаю это и (б) усложняю, чем нужно. Итак, есть ли предпочтительный способ сделать это? Или есть вариант, который я упустил? Любая помощь приветствуется, я занимаюсь этим часами, не принимая решения.

Спасибо.

Ответы [ 2 ]

0 голосов
/ 25 марта 2011

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

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

0 голосов
/ 25 марта 2011

Как насчет объединения таблицы цветов в запросе, который заполняет таблицу person.Имейте свойство FavouriteColor для объекта person.Объект не будет истинным представлением столбцов таблицы, но вся необходимая информация будет получена при вызове db.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...