“タスク”は所有者を持てる
タスクは”誰がそれを所有するのか(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 | その場合、その「タスク」が「○○タスク」か否かは、コンテキスト(前提条件)によって定まるはず。 |
---|