命令模式 - 不堪重负!太小太大,太大就太大

时间:2010-09-01 21:02:57

标签: design-patterns data-structures command

问候,

我正在写一个简短的简单剧本,但已经变得过于拥挤。东西需要做很多事情

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..

因此,如果我将“命令”分解为正确的对象并正确执行,我必须制作某种“框架/服务”来执行命令,并提供,记录器,dbh,配置等。< / p>

如果我将命令放入方法(然后是命令模式),我将重用所有现有资源(配置,记录器,数据库句柄等),但代价是所有这些功能和方法混在一堂课。

什么代码结构会给我一个更好的“资源/方法/函数”用法,但是还允许我保持代码简洁明了?

这不是一个大的计划......

-daniel

1 个答案:

答案 0 :(得分:1)

您可以进行的一项更改是将联合资源放入ExecutionContext类,基类Command类可以包含容纳该对象的属性。然后,当应用程序构造Command子类实例时,它可以使用共享数据填充该上下文属性。