ruby oo вопрос о дизайне, должен ли я снова открыть класс или использовать шаблон расширения - PullRequest
0 голосов
/ 12 февраля 2011

, поэтому у меня есть объект ruby, который мне нужно создать в виде строк в формате pdf и excel и в строке cvs

На данный момент я создал новый класс с методом для получения объекта и выполнения необходимых действий для создания pdf, excel, csv

Я читал Agile Software Development, Принципы, Шаблоны и Практики, и в нем упоминался метод расширения, поэтому я собирался это сделать, но поскольку это ruby, я должен просто открыть класс в другом файле и добавить методы там, чтобы отделить их от основного класса

так

файл ruby_model.rb

class RubyModel < ActiveRecord::Base

end

затем сделайте

ruby_model_pdf.rb

class RubyModel

  def to_pdf
  end
end

ruby_model_cvs.rb

class RubyModel

  def to_csv
  end

end

или я должен пойти с шаблоном расширения объекта?

Приветствия

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Вы должны поместить свои методы в модуль и включить модуль в класс.Этот способ предпочтительнее, потому что легче увидеть, откуда появились методы (например, в обратном следе), и легче повторно использовать методы, если выясняется, что они могут использоваться и в других классах.

Например:

module Conversions
  def to_pdf
  end
  def to_csv
  end
end

class RubyModel
  include Conversions
end

Также может быть хорошей идеей поместить to_pdf и to_csv в разные модули, если только вы не хотите смешивать в одном, вы всегда хотите смешать вдругой.

Все это предполагает, что методы не принадлежат самому классу, а судят по именам, которым они не принадлежат.

0 голосов
/ 12 февраля 2011

Если языковая функция работает нормально, оставьте ее простой и используйте ее.

Шаблоны проектирования - это документированные обходные пути для случаев, когда язык недостаточно выразителен.Примером Ruby будет Iterator, который становится избыточным с помощью блоков и Enumerable.

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