问候,
我正在写一个简短的简单剧本,但已经变得过于拥挤。东西需要做很多事情
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
答案 0 :(得分:1)
您可以进行的一项更改是将联合资源放入ExecutionContext
类,基类Command
类可以包含容纳该对象的属性。然后,当应用程序构造Command
子类实例时,它可以使用共享数据填充该上下文属性。