Нужны какие-либо дизайнерские идеи для фильтрации свойств объекта - PullRequest
1 голос
/ 09 июня 2011

Предположим, есть класс HouseHoldItems.Он может иметь несколько различных элементов, таких как

Class HouseHoldItems
{ 
  TV,
  Fridge,
  Hammer,
  Chair,
  Watch,
  Shoes,  
}

. Я хочу найти способ, с помощью которого я могу обозначить несколько элементов, например, «Электронный», «ClothBased», «Железный»,'Electric'.Затем я хотел бы получить список электронных элементов и т. Д.

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

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

Спасибо Мани

Ответы [ 3 ]

0 голосов
/ 09 июня 2011

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

Если я правильно понимаю, то здесь у вас классические отношения многие ко многим между элементами и «категориями». Есть много способов представить такие отношения.

Если вы собираетесь хранить данные в реляционной базе данных, то наиболее естественным способом является введение объекта, который связывает один элемент вместе с одной категорией. Мало таких объектов может существовать для каждого элемента. Именно так отношения «многие ко многим» представлены в реляционных базах данных.

Если вам нужно только сохранить эти отношения во время выполнения, вы можете просто добавить список категорий в качестве поля класса Item и список элементов в категории в качестве поля класса категории. Убедитесь, что они синхронизированы в любой момент, и этого должно быть достаточно. Будет легко получить необходимую информацию.

Итак, ключевой момент заключается в создании класса Category или Tag и создании его экземпляра для каждой категории, такой как «электрический» и «тканевый», тогда нужно связать два вместе - либо через прямая связь с обеих сторон или через объект "отношения".

0 голосов
/ 10 июня 2011

Этот шаблон может быть Шаблон запроса .Скажем, у вас есть метод Select () с аргументом критерия «Электронный», который возвращает список запрошенных элементов.

Item[] HouseHoldItems.Select(string criteria);

Конечно, вам нужно реализовать этот метод.

0 голосов
/ 09 июня 2011

Это должно привести вас в правильном направлении:

public enum Category { Electronic, ClothBased, // etc. }

abstract class HouseholdItem { 
    private readonly Category category;
    public Category Category { get; }
    public HouseholdItem(Category category) {
        this.category = category;
    }
}

class Television : HouseholdItem {
    public Television() : base(Category.Electronic) { }
}

Вы даже можете превратить Category в class, если вам нужно.

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