なるとのベースクラスはオーバーライドにしよう
先日に引き続き、『いろんなサイトの巡回ライブラリ なると』を開発しております。
ベースクラスを再設計しました。
どのサイトへアクセスする場合でも、同じメソッド名で使えるようにするには
オーバーライドな設計にしとかなくちゃならなかったんですね。
こんな感じ*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:実際のコードはもっとカオスです^^;