[ライフハックプログラム考] タスクは所有者を持てる

投稿者: | 2017/07/19

“タスク”は所有者を持てる

タスクは”誰がそれを所有するのか(owned_by)”という情報を持てる。

module TaskInterface
  class Core
    attr_accessor :action, :target
    
    def initialize(action:, target:)
      @action = action
      @target = target
    end
  end

  module Owner
    attr_accessor :owned_by
    
    def initialize(owned_by:)
      @owned_by = owned_by
    end
  end
end

class Task < TaskInterface::Core
  include TaskInterface::Owner

  def initialize(action:, target:, owned_by: "私が")
    @action = action
    @target = target
    @owned_by = owned_by
  end
end

myTask = Task.new(action: "片付ける", target: "部屋を")
p "#{myTask.owned_by} #{myTask.target} #{myTask.action}"

wifeTask = Task.new(action: "用意する", target: "昼食を", owned_by: "妻が")
p "#{wifeTask.owned_by} #{wifeTask.target} #{wifeTask.action}"
  • Task に対して”誰が”に関する内容を拡張するのでTaskInterface::Owner という名前でモジュール化してみました。
    それに伴い”タスクの最小構成”に該当する部分はTaskInterface::Core クラスとしています。
  • “誰の所有か”を示すowned_by は、初期化時にオプショナルな引数となっています。
    既定値は”私が”で、特に指定が無ければ、その値が使われます。

所感(あるいは言い訳のようなもの)

  • 普段自分が扱っているタスクの構成要素は大半が拡張的に追加されたもの(has a)なのですね。
    継承でそれを拡張していくのは悪手なので、Ruby の場合だとmodule 使ってMix-in という方向になりそうです。
    タスクにも種類があって、最小構成のタスクを基底クラスに継承でバリエーション(is a)な気もするのですが、それだとタスクの種類全てを命名して行く必要がある上に、それらの間でも共通項やら出てくる事になるので、厳しいなと。
    ユーザーにとっても「○○タスク」と種類付けて呼ぶより「タスク」と呼ぶでしょうしね。*01その場合、その「タスク」が「○○タスク」か否かは、コンテキスト(前提条件)によって定まるはず。
  • モジュールやクラスの構成がはたしてこれでええんか?という部分について、まったく自信がありません。
    「こうだからこうなんじゃね?」とか「この方がこうだから良くね?」みたいな反応は大歓迎です。

脚注   [ + ]

01. その場合、その「タスク」が「○○タスク」か否かは、コンテキスト(前提条件)によって定まるはず。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

このサイトはスパムを低減するために Akismet を使っています。コメントデータがどう処理されているか知りたい方はこちらをお読みください