Design patterns 命令模式-不知所措!太小就是太大,太大就是太大

Design patterns 命令模式-不知所措!太小就是太大,太大就是太大,design-patterns,data-structures,command,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

您好

我正在写一个简短的脚本,但已经变得太拥挤了。东西要做很多事情

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等

诗句

如果我将命令放入方法(而不是命令模式),我可以重用所有现有资源(配置、记录器、数据库句柄等),但代价是将所有这些函数和方法混合在一个类中

什么样的代码结构能让我更好地使用“资源/方法/函数”,同时又能让我的代码保持简洁

这也不是什么大计划


-daniel

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

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

我喜欢这样,ExecutionContext并不能解决所有问题,但确实解决了很多问题-danielI就像这样,ExecutionContext并不能解决所有的问题,但确实解决了很多问题-丹尼尔