nicolib C# Java 設計案 @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のキャッシング、データの拡張など あと生放送の運営コマンド関係なんかもひつようかなぁ ここだけすごい大雑把なのは許してください