@Fly3110
web developer

Кто должен брать на себя обязанность по созданию модели из нестандартной структуры?

Всем привет.

Есть 2 модели. Назовем их Order и OrderItem
Экземпляр модели OrderItem можно создать как стандартным способом (передав все требуемые параемтры модели), так и нестандартным, передав структуру с полями, которые отличаются от полей модели. С этими полями проводялся определенные манипуляции, результатом которых является структура со стандартными полями модели.

Кто (и как) должен быть ответственным за создание модели из нестандартных полей? У меня три варианта. Я их расположил от самого худшего (по моему мнению) до самого лучшего.

Вариант 1: Стандартные поля модели готовит контроллер. Почему этот вариант нравится меньше всего, потому что нестандартная структура может быть использована при создании данной модели как ассоциации модели Order

Вариант 2: Создание собственного метода для создания модели. Например def create_from_custom_struct. Этот вариант нравится чуть больше, но при этом требуется некоторый колхоз для поддержки методов new/save при использовании нестандарнтных полей.

Вариант 3: attr_writer для каждого нестандартного поля. Этот вариант нравится больше всего, минусов пока не вижу.

Вопрос такой, прав ли я, что вариант 3 самый верный? Или возможно я упускаю какой-то четвертый вариант?

Спасибо.
  • Вопрос задан
  • 46 просмотров
Пригласить эксперта
Ответы на вопрос 1
@fairwind
Передавайте вместо параметров экземпляр нужного класса, который возвращает "стандартные" поля, а внутри преобразующий поля, как нужно.
class BaseItem
class ExtendedItem < BaseItem
...
OrderItem.new(BaseItem.new(params))
OrderItem.new(ExtendedItem.new(params))
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы