шаблон команды - перегружены!слишком маленький - слишком большой, а слишком большой - слишком большой - PullRequest
1 голос
/ 02 сентября 2010

Привет,

Я пишу короткий простой сценарий, но он стал слишком переполненным. Материал должен делать довольно много вещей

class Stuff

  attr_accessor :config # stores configuration
  attr_accessor :dbh    # stores database handle
  attr_accessor :logger # general logger to use

  def command_do_job_1
  end

  def command_do_job_2
  end

  def command_do_job...n

end

Я знаю, это неправильный шаблон команды

Проблема, которая возникает, заключается в том, что каждой команде требуется

1. Configuration
1. Logger
1. Set of parameters
n. database handles
m. supporting methods/functions

Хорошо, теперь я не доволен, потому что, если я помещаю команды в надлежащие объекты, то я создаю много записей конфигурации, параметров, дескрипторов, и есть много вспомогательных методов / функций, которые я хочу повторно использовать для разных команд!

Что-то действительно не так, как надо:

class Stuff
  attr_accessor :dbh, :logger, :config

end

class Command
  attr_accessor :parent

  def initialize(parent)
    @parent = parent
  end

  def config
    @parent.config
  end

  ad-nausiem for logger, dbh, other "joint" resources etc...
end

stuff = Stuff.new
cmd = Command.new stuff # so, I can carry the same logger, dbh, configs, etc..

Итак, если я разбиваю «команды» на правильные объекты и делаю это правильно, мне нужно создать некий «каркас / службы» для выполнения команд и предоставления, logger, dbh, config и т. Д.

стихи

Если я помещу команды в методы (тогда это не шаблон команды), я получу возможность повторно использовать все свои существующие ресурсы (config, logger, handles базы данных и т. Д.), Но за счет всех этих функций и методов. быть смешанным в 1 классе.

Какая структура кода дала бы мне лучшее использование «ресурсов / методов / функций», но также позволила бы сделать мой код красивым и простым?

Это не такая уж большая программа ...

-daniel

1 Ответ

1 голос
/ 02 сентября 2010

Одно из изменений, которое вы можете сделать, - поместить объединенные ресурсы в класс ExecutionContext, а базовый класс Command может содержать свойство для размещения этого объекта.Затем, когда приложение создает Command экземпляров подкласса, оно может заполнить это свойство контекста общими данными.

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