Найти в Дзене
Logonok

Создание однотипных объектов с произвольными свойствами

При разработке веб-приложения часто возникает задача создавать объекты, которые можно однотипно обрабатывать, но при этом они могут иметь различные свойства. Эти свойства нельзя просто записать в текстовое поле, потому что необходимо по ним искать, фильтровать и группировать объекты. Широко известный пример - это товары в магазине. Карандаши, рубашки, велосипеды, компьютеры обладают совершенно различными свойствами, но одинаково обрабатываются в списках товаров, заказах, корзине и т.п. В декларативном фреймворке Evado можно реализовать несколько способов решения данной задачи. Причём, как и во многом другом, достаточно использовать унифицированный веб-интерфейс вместо написания кода. Наследование Первый способ - это классическое наследование. Создается базовый тип (класс) товара и от него наследуются новые типы, в которые добавляются необходимые свойства (атрибуты). Для работы с дополнительными свойствами нужно как-то их обозначить и для этого хорошо подходит группировка атрибутов
Оглавление

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

В декларативном фреймворке Evado можно реализовать несколько способов решения данной задачи. Причём, как и во многом другом, достаточно использовать унифицированный веб-интерфейс вместо написания кода.

Наследование

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

Для работы с дополнительными свойствами нужно как-то их обозначить и для этого хорошо подходит группировка атрибутов. В базовом классе товара создается группа (например, Опции), в которую, в классах-наследниках, добавляются нужные атрибуты (например, Цвет, Размер, Материал и т.п.).

Плюсы и минусы наследования - это строгая иерархия классов. С одной стороны - она позволяет легко добавлять новые объекты, просто выбирая подходящий класс и заполняя атрибуты. С другой стороны - любое изменение атрибутов у объекта требует изменение во всём классе или создание нового.

Пример рабочего приложения «Интернет-магазин» с реализацией дополнительных свойств товаров через наследование.

Композиция

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

Пример композиции свойств внутри объекта:

  • Создается базовый класс Свойство.
  • От класса Свойство наследуется класс Цвет, в котором определяется атрибут Значение, в котором задаётся перечисление всевозможных цветов.
  • Создаются объекты класса Цвет со значениями Красный и Зелёный.
  • От класса Свойство наследуется класс Размер, в котором определяется атрибут Значение, в котором задаётся перечисление допустимых размеров.
  • Создаются объекты класса Размер со значениями 48, 50 и 52.
  • Создаётся класс Товар.
  • В классе Товар создаётся атрибут Опции, который ссылается на класс Свойство.
  • Создается объект класса Товар (например, Рубашка).
  • В ссылочном атрибуте Опции привязываются объекты Цвет и Размер (например, Зелёная и 50).

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

Минусы - это более ресурсоемкие операции со свойствами. Так как свойства из атрибутов классов превратились в полноценные объекты, то уходит больше времени на их обработку.

Заключение

Какой способ реализации дополнительных свойств однотипных объектов выбрать зависит от требований приложения. Каждый имеет как плюсы, так и минусы. С помощью декларативного фреймворка Evado вы может легко создать веб-приложения с любым из них.

-2