2010-09-01 123 views
1

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

我正在写一个简短的脚本,但变得太拥挤了。东西必须做不少事情

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

所以,如果我打出来的“命令”到合适的对象和做是正确的,我必须做出某种“框架/服务“在和供应,记录仪,胸径,配置等执行命令..

经文

如果我把这些命令转换方法(而不是命令模式的话),我得到重用我的所有现有资源(配置,记录器,数据库句柄等),但是花费所有的时间这些功能和方法被混合在一个类中。

什么代码结构会给我一个更好的“资源/方法/功能”的用法,但也让我保持我的代码很好和简单?

这不是什么大不了的程序之一...

-daniel

回答

1

一个变化,你可以做是把共同的资源投入到一个ExecutionContext类和基础类Command可能包含一个房子来容纳那个物体。然后,当应用程序构造Command子类实例时,它可以使用共享数据填充该上下文属性。

+0

我喜欢这个,ExecutionContext并没有解决所有的问题,但确实得到了很多! -daniel – Daniel 2010-09-01 21:18:43