リリースはありません
@author はるxxxx
ライブラリの設計にあたり、どのような特徴を備えるべきか
効率的な開発のためにライブラリ全体を4つのブロックに分けて設計する。
ニコニコサーバーとのHTTP通信を取り扱う。
(課題)
単純なAPIアクセス、APIのインスタンス化を取り扱う。
◆ 概要
□ 情報取得系APIについて
□ 操作系APIについて
(課題)
◆ 詳細設計
全てのAPI表現クラスはApiBase抽象クラスからの派生型とする
ApiBaseクラスにはApi内部のデータを任意に取り出せるSelect(String location);という抽象メソッドを定義しておく。(返り値はString。) SelectIntとかSelectDateなんかもあると便利かも。(作る場合はSelect抽象メソッドを使ってApiBaseに実装を書くとらくちん)
ApiBaesクラスの派生型としてXmlApiBase、UrlParamApiBase、HtmlApiBaseの3つの抽象クラスを定義する。
この3つのクラスはAPIから受け取ったデータを、それぞれXMLDocument、HashMap、テキストデータとして内部に保存する。 Selectメソッドを実装してこれらから任意のデータを取り出せるようにしておく。
(Selectのlocation引数は、XmlApiBaseはXPath、UrlParamApiBaseは名前、HtmlApiBaseは正規表現パターンでいいんじゃないでしょうか)
具象クラスは対象のAPIの名前を持つクラス。PlayerStatusとか データへのアクセスは、値をプロパティとしてクラスに定義しておく方法と XPathなどで任意のデータを取り出せる方法を用意する。
例 簡単に実装するとこんな感じ(妄想コード)
- abstract class ApiBase
- {
- public abstract string Select(string location);
- }
- abstract class XmlApiBase : ApiBase {
- System.Xml.XmlDocument xdoc;
- protected void loadXml(string url) {
- xdoc = new System.Xml.XmlDocument();
- xdoc.LoadXml(Http.Get(url));
- }
- public string Select(string location) {
- return xdoc.SelectSingleNode(location).Value;
- }
- }
- public class PlayerStatus : XmlApiBase {
- public static PlayerStatus Get(string liveId) {
- string url = "http://-----" + liveId;
- PlayerStatus p = new PlayerStatus();
- p.loadXml(url);
- return p;
- }
- private PlayerStatus() { }
- public String Addr {
- get {return this.Select("getplayerstatus/ms/addr");}
- }
- }
生放送と実況のコメントとアラートのコメントを取扱う。
設計としては テキストベースの送信と受信(\0区切りで)が行えるClientBaseなるクラスを作って、 ChatReceiverやAlertReceiverみたいな派生クラスを作ればいいんじゃないかと思います。(適当
(課題) 詳細設計 イベントの種類 非同期処理
動画のダウンロードとか頻繁にアクセスするAPIのキャッシング、データの拡張など あと生放送の運営コマンド関係なんかもひつようかなぁ ここだけすごい大雑把なのは許してください
[ページ情報]
更新日時: 2010-04-11 01:49:36, 更新者: freehand0906
[権限]
表示:無制限, 編集:ログインユーザ, 削除/設定:メンバー