2010-10-07

Blogger で作ったブログの記事の内容を表示する #3

前回のリファクタリング構想にしたがい、実装を行う。

表示内容を保持するオブジェクト

アプリ固有の情報を AppInfo オブジェクト、ビュー(前回まではページと呼んでいた)固有の情報を ViewInfo オブジェクトに収めることにした。ただし、ViewInfo オブジェクトはビューの種類(一覧表示と内容表示)ごとにサブクラス化して使う。

ビュー内の表示領域の構成と表示内容オブジェクトの対応

これら表示内容オブジェクトは src/info.py で定義している。

AppInfo

アプリ固有の情報を保持するため、すべてのビューで使われる。このオブジェクトが保持するのは、基本的に config.yaml で設定する情報だ。

AppInfo のプロパティ一覧
プロパティ名 説明
lang 生成される HTML に対する言語指定。具体的には html 要素の lang 属性の値を指定する。
title アプリのタイトル。html/head/title 要素の内容になることを想定している。
stylesheet 生成される HTML で使用されるスタイルシート。
home_url アプリのトップ URL。
ListViewInfo

一覧表示ビューで表示する情報を保持する。

ListViewInfo のプロパティ一覧
プロパティ名 説明
page 表示するページ番号。
total_pages 全ページ数。
content フィードにふくまれる entry 要素のデータ。実際には Entry (後述) のリストになっている。

ListViewInfo.content は (main.py で定義している) Entry のリストであり、Entry は以下のプロパティを持つ。

Entry のプロパティ一覧
プロパティ名 説明
title 記事のタイトル。
feedlink 個別記事のフィードへの URL。
PostViewInfo

内容表示ビューで表示する情報を保持する。

PostViewInfo のプロパティ一覧
プロパティ名 説明
title 記事のタイトル。
permalink Blogger の個別記事への permalink。
content 記事の内容となるテキスト。実際には Unicode 文字列になっている。

リクエストハンドラの変更

MainHandler (main.py で定義、一覧表示リクエストを処理する)、PostViewHandler (postview.py で定義、内容表示リクエストを処理する)ともに、template.render にわたすディクショナリに直接値を詰めるのではなく、AppInfo と ViewInfo (のサブクラス) オブジェクトを用意するように変えた。

その他の修正

前回のリファクタリング・プランにはなかったが、feed/core.py で定義していた Entry クラスを削除した。このクラスは Atom フィードにふくまれる entry 要素のデータを保持するためのものだが、単純にディクショナリ型オブジェクトとして保持することに変えたため不要になった。

またこれにともない、AtomFeedAtomPostFeed でも解析後にデータを保持する方法を修正している。

関連リンク

関連記事

0 件のコメント:

コメントを投稿