Разработка решения для извлечения и классификации контента на основе заданных атрибутов - PullRequest
2 голосов
/ 14 марта 2012

Это проблема дизайна, с которой я сталкиваюсь.Допустим, у меня есть сайт автомобилей.Автомобили имеют следующие атрибуты с различными возможными значениями.

  • Цвет: красный, зеленый, синий
  • Размер: маленький, большой

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

  • Cars_young: красный или зеленый
  • Cars_middle_age: синий ибольшой
  • Cars_elder: синий и маленький

Я назову этот критерий target

У меня есть таблица автомобилей со столбцами: id,цвет и размер.

Мне нужно иметь возможность:

a) при извлечении автомобиля по идентификатору, указать его target (если этомолодые люди, люди среднего возраста или пожилые люди)

b) иметь возможность запрашивать базу данных, чтобы узнать, сколько просмотров имели автомобили, принадлежащие каждой цели

Кроме того, как разработчик, я должен реализовать его так, чтобы эти критерии были легко изменены.

Что является лучшим способомреализовать это?Есть ли шаблон дизайна для этого?Я могу объяснить два возможных решения, о которых я думал, но мне не очень нравится:

1) создать новый столбец в таблице базы данных с именем target , так что этолегко сделать и а) и б) .

Недостатки: каждый раз, когда меняется crieteria, мне приходится обновлять цель столбца для всех автомобилей, а также мне приходится менять функцию insertNewCar ().

2) Реализуйте это в классе «Автомобили».

Недостаток: каждый раз, когда меняются критерии, мне нужно изменить запрос в b) , а также код в 'getCarById' в a) .

3) Использовать TRIGGERS в SQL, но я бы хотел, если возможно, избежать этого решения

Я хотел бы иметь возможность иметь это определение критерия где-то в коде, которое можно легко изменить, итакже, надеюсь, будет использоваться классом «Автомобили».Я думаю о каких-то одноэлементных или глобальных объектах для «цели», которые могут быть введены в некоторые методы Cars.

Кто-нибудь может объяснить хорошее решение или отправить документацию о каком-либо посте, который сталкивается с этой проблемой, или о шаблоне, который ее решает?

1 Ответ

1 голос
/ 21 марта 2012

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

OverDueSpecification OverDue = new OverDueSpecification();
NoticeSentSpecification NoticeSent = new NoticeSentSpecification();
InCollectionSpecification InCollection = new InCollectionSpecification();

ISpecification SendToCollection = OverDue.And(NoticeSent).And(InCollection.Not());

InvoiceCollection = Service.GetInvoices();

foreach (Invoice currentInvoice in InvoiceCollection) {
    if (SendToCollection.IsSatisfiedBy(currentInvoice))  {
        currentInvoice.SendToCollection();
    }
}

Можно рассмотреть комбинацию specification с observers.

Также есть несколько других идей:

  • расширение шаблона specification при генерации SQL, в частности, предложения WHERE
  • сохранение конфигурации критериев в базе данных
  • критерий управления версиями: хранение информации о версии правил, используемой для присвоения категории, объединенной с самой категорией
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...