Новый метод в модели или новый сервис - какой подход лучше? - PullRequest
0 голосов
/ 30 апреля 2019

Я внедряю новое приложение со следующим бизнес-процессом:

  1. Пользователь заполняет регистрационную форму.
  2. После сохранения регистрационной формы создается новая обучающая компания
  3. Пользователь получает электронное письмо с PDF-файлом с регистрационной формой и уникальным URL-адресом
  4. Пользователь использует уникальный URL-адрес для прикрепления подписанной регистрационной формы. Администратор может принять или отклонить

Каков наилучший подход к созданию Тренинговых Компаний?

Первое решение: новый сервис, который создает TrainingCompany

class TrainingCompanyService

  def initialize(company_name)
    @name = company_name
  end

  def create_new_training_company
    TrainingCompany.new(company_name: @name).save
  end

end

создать действие в RegistrationFormController:

def create
    @registration_form = RegistrationForm.new(registration_form_params)

    respond_to do |format|
      if @registration_form.save
        format.html { redirect_to @registration_form, notice: 'Registration form was successfully created.' }
        TrainingCompanyService.new(@registration_form.company_name).create_new_training_company
        RegistrationFormMailer.with(registration_form: @registration_form).after_registration_email.deliver_later
      else
        format.html { render :new }
      end
    end
  end

Второе решение: новый метод внутри модели TrainingCompany:

class RegistrationForm < ApplicationRecord

  belongs_to :training_company, optional: true
  has_one_attached :registration_form

  has_secure_token :signed_form_upload_token


  def create_new_training_company
    TrainingCompany.new(company_name: self.company_name, registration_form_id: self.id).save
  end
end

создать действие в RegistrationFormController:

def create
    @registration_form = RegistrationForm.new(registration_form_params)

    respond_to do |format|
      if @registration_form.save && @registration_form.create_new_training_company
        format.html { redirect_to @registration_form, notice: 'Registration form was successfully created.' }

        RegistrationFormMailer.with(registration_form: @registration_form).after_registration_email.deliver_later
      else
        format.html { render :new }
      end
    end
 end

Какое решение вы бы выбрали и почему? Лично я предпочитаю второй (новый метод внутри модели) ...

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