代码之家  ›  专栏  ›  技术社区  ›  Daniel

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

  •  1
  • Daniel  · 技术社区  · 14 年前

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

    因此,如果我将“commands”分解成适当的对象并正确地执行,我就必须生成某种“framework/services”来执行中的命令,并提供、logger、dbh、config等。。

    诗句

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

    这也不是什么大计划。。。

    -丹尼尔

    1 回复  |  直到 14 年前
        1
  •  1
  •   Jacob    14 年前

    你可以做的一个改变是把联合资源投入到 ExecutionContext 类和基 Command 类可以包含容纳该对象的属性。然后,当应用程序构造 命令 子类实例,它可以用共享数据填充该上下文属性。