なるとのクラス図
なるとのクラス図を書いてみる。*1
あと、脳内にある設計を記録としてちゃんと残してみる。
基本仕様
基本的に、AgentObjectを操作する。
汎用性と拡張性を持たせるために、BaseAccessorClassやInitializerModuleなどを使っている。
AgentObjectのメソッド"get_url_pattern"は、サイトからスクレイピングしてきた値を直接返すだけ。
AgentObjectのメソッド"create_hogehoge_object"は、サイトからスクレイピングしてきた内容を
Rubyのオブジェクトとして再構成して返す。
あと、なるとを使うコード中で$KCODEを設定しておいてくれたら、
特に文字コード変換しなくてもなるとがよろしくサイトに合わせて文字コードの変更もやるように作っている。
拡張方法
サイトのHTMLコード変更や、APIの仕様変更などでなるとが動作しなくなった場合、
サイトに追加された新機能への対応をする場合などは、パーサモジュールの変更だけで
対応できるようにする。
また、対応サイトが増えた場合にはパーサモジュールを追加して、InitializerModuleにちょこっと
手を加えるだけで対応できるように設計している。
ファイル構成
readme_ja.txt
licence.txt
このへんはお決まりで。
lib/naruto.rb
コアクラス
lib/config/initializer.rb
初期化やら設定やら
lib/accessor/base_accessor.rb
ベースクラス
lib/accessor/sites/mixi.rb
lib/accessor/sites/twitter.rb
サイト別のパーサモジュールをこのへんに
lib/accessor/sites/mixi/base.rb
lib/accessor/sites/mixi/friend/friend.rb
lib/accessor/sites/mixi/firend/profile.rb
クラスごとにファイルや階層を分けるのがRubyのしきたり
進捗度
20%程度
*1:…というか、クラス図を書くのは初めてだったりする(ぉぃ
*2:コアクラス、InitializerModuleによって初期化され、BaseAccessorClassを継承し、任意のパーサモジュールをオーバーライドしたAgentObjectを所持する
*3:初期化するだけ
*4:こいつが本体、こいつがパーサモジュールをオーバーライドしたAgentObjectを持っている
*5:オーバーライドされたオブジェクト、こいつが実質的なアクセサ
*6:mixi用のパーサモジュール、AgentObjectにextendされる
*9:twitter用のパーサモジュール、AgentObjectにextendされる
*11:同上
*12:同上
*13:同上
*14:同上