なるとのベースクラスはオーバーライドにしよう

先日に引き続き、『いろんなサイトの巡回ライブラリ なると』を開発しております。

ベースクラスを再設計しました。
どのサイトへアクセスする場合でも、同じメソッド名で使えるようにするには
オーバーライドな設計にしとかなくちゃならなかったんですね。

こんな感じ*1で設計ちう。

#!ruby sites/timelog.rb
module Timelog
  def get_public_timeline
    # Timelogのパブリック取得用コード
  end
end

#!ruby sites/feecle.rb
module Feecle
  def get_public_timeline
    # Feecleのパブリック取得用コード
  end
end

#!ruby base_accessor.rb
require 'sites/timelog'
require 'sites/feecle'

class BaseAccessor
  SITE_MODULES = [Timelog, Feecle]

  def initialize(site = SITE_MODULES.first)
    @site = site
    @agent = init_agent
    @agent.login
  end

  def init_agent
    agent = Object.new
    SITE_MODULES.each do |site|
      agent.extend site if @site == site
    end
    return agent
  end

  def change_site(site)
    @site = site
    @agent = init_agent
    @agent.login
  end

  def login
    @agent.login
  end

  def get_public_timeline
    @agent.get_public_timeline
  end
end

こんな感じかな?

対応サイトごとにクローリング用のコードをRootDir/sites/site.rbにわけてモジュールにして
base.rbのBaseAccessorクラスで取り込む。
実際に利用者が使うのはベースクラスだけ。
サイトの改編に合わせてメンテナンスするのはRootDir/sites/site.rbだけで良いというイメージ。
これで少しはメンテナンス性とか拡張性が良くなるんじゃないだろうか。

この設計を選んだ理由は、3つ。

  • サイトごとに別のメソッド名やクラス名にするのはクールじゃないと思った
  • 使う人が覚えるメソッド名は少ない方がいいと思った
  • クローリング用のコードはサイトごとに別々に管理したかった

さて、基本設計が変わったのでいろいろやり直しですががんばってコーディングしますよぃ。

*1:実際のコードはもっとカオスです^^;