<< 2024 年 3 月 >>
25
26
27
28
29
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
1
2
3
4
5
6


 トップ > HTML Binder  当サイトの管理ツールの紹介です。

 1 2 3 
2010/08/03 08:40
3. HTML Binder の設計方針

HTML Binder プログラムの設計方針を記します。設計あるいは実装において、「複数の選択肢の中で、どの方法が良いのか」という選択を下す必要があるとき、この方針に沿って決定します。結果的に、システムの骨格がこの方針に沿って作られることになります。

  1. 複数のプラットフォームで稼働
  2. 利用者の階層化と権限の分割
  3. ビジネスロジックとプレゼンテーションを二層化
  4. 複雑さの排除
  5. 改良の容易さ
  6. アプリケーションプラットフォームとしての利用
  1. 複数のプラットフォームで稼働
  2. HTML Binder は Apache 等の HTTP サーバーと連携して動作するウェブアプリケーションです。プログラム言語として PHP または Perl を使うことで、多くのプラットフォームで動作させることが可能となりますが、テンプレートエンジンとして Smarty を使うことから、HTML Binderでは PHP を使うことにしました。個人的には、Perl よりも PHP を使うほうが好きです。

    DBMS を使うかどうか、使うとしたらどれを使うのか。多くのホスティング環境では MySQL が使えるようになってきましたが、それを前提にして良いのかどうか。迷いましたが、DBMS は使わないことにしました。

    PHP の連想配列を使うことで、正規化したデータファイルの結合も効率よく行えそうです。ファイル更新時にはファイル単位で排他ロックを行うことで、ロックの順序さえ決めておけば、問題はないでしょう。基本的なアクセスメソッドをパッケージ化した基本クラスを作成し、そのクラスを継承する個別のデータファイルクラスを使うことにしました。また、基本クラスを DBMS 用に記述し直せば、他の部分の変更なしに DBMS の利用も可能になります。

    日本語の扱いについては、マルチバイトのコード系として、Shift_JIS、EUC、UTF-8 のどれでも選べる必要があります。PHP はdefault_charset、mb_string.http_output、mb_string.internal_encoding、mbstring.encoding_translation、mbstring.language を適切に設定することで、マルチバイトを簡単に扱えます。サーバーの引っ越し等でプラットフォームを変更せざるを得ない場合、マルチバイトのコードの変換を容易に行えるような、移行用にパッケージ化されたデータ形式が必要になります。

  3. 利用者の階層化と権限の分割
  4. PC に詳しいとか HTML が使えるという人に、その理由だけでホームページの運営一式を任せる場合がありますが、ウェブでの情報公開には情報そのものを公開してよいのかどうかという経営レベルでの判断も必要になります。記事原稿を作成する人、原稿を校正する人、記事の公開を決裁する人、HTML を使いページレイアウトをデザインする人、ホームページにはいろいろな関わり方をする人たちがいて当然です。それぞれの権限において、守備範囲となるデータを責任を持って扱えるように、利用者権限を明確化する必要があります。また、事業所などが階層化された組織構造を持つように、利用者も階層化させることで、権限の委譲を機能化し、責任構造が明確になります。

  5. ビジネスロジックとプレゼンテーションを二層化
  6. 簡単に言うと、コンテンツとその見せ方を分離して扱うことです。コンテンツは記事のことですが、「記事」の管理に伴う「利用者」とその「権限」の情報、階層化に使う「分類」の情報等を含めて、ビジネスロジックと呼んでいます。

    プレゼンテーションは見せ方のことですが、ページレイアウトの定義だけではなく、閲覧者にウェブサイトをいかに見てもらえるか、使い勝手(ユーザビリティ)も考慮の対象です。メニュー等のページナビゲーションもプレゼンテーションの大切な要素です。

    ページレイアウトの定義は、テンプレートエンジンとしての Smarty を使うことで、容易にコンテンツから独立させることができます。Smarty にはキャッシュ管理機能もあります。短時間に多くの閲覧者を集めるサイトでは、キャッシュの使用はメリットが大きいでしょう。

    ビジネスロジック層の管理するデータは、プレゼンテーション層を通して、間接的にアクセスすることになります。プレゼンテーション層の実装では、必要のない情報は見せない、許可された情報のみを公開することに注意深くあるべきです。テンプレートの定義は、ルートレベルの管理権限を持つ利用者のみに限定すべきです。また、記事中に HTML タグを挿入できると、多彩な見せ方ができますが、使用できるタグの種類を限定する必要があります。許可されていないタグは、無効化の対象となります。使用できるタグの種類を決定するのも、ルートレベルの管理権限を持つ利用者に限定すべきでしょう。

  7. 複雑さの排除
  8. システムは機能を拡張するにつれ、複雑さを増して行きます。複雑さはパフォーマンスを落とし、保守性を悪化させ、バグを呼び込みやすくします。何気ない機能追加でも、意識して複雑さを排除する必要があります。

    「分類」は、記事の分類や利用者権限を階層化するのにも使っています。利用者を階層化するのに、「所属」という概念を持ち込まずに、「分類」を共通して使う選択をしたのも、複雑さを排除するためです。

  9. 改良の容易さ
  10. ソフトウェア製品は使い込んで、絶えず改良を加えることで、練れた熟成したものになります。最初から完成されたものを提供するというよりも、まず使ってみて評価して、改良を加えるというサイクルを繰り返すことが必要になります。改良の容易さというのは、システムの骨格がしっかりとしていることはもちろんですが、実稼働中でも運用を阻害しないように改編が行える、設計上の工夫のことです。例えば、データファイルにバージョンスタンプを持たせることで、項目が追加されたりした新バージョンのデータ形式への自動変換が可能になります。

    ページレイアウトの定義中のコンテンツ部分の記述には、コンテンツデータを格納した Smarty 変数というデータ項目を使います。Smarty 変数を直接使う代わりに、「テンプレート部品」という中間層を作り、ページレイアウトの定義中ではテンプレート部品名を記述するようにします。こうすることで、データ項目の改編による影響は、テンプレート部品の該当定義箇所を変更するだけで、ページレイアウトの定義は変更なくそのまま使えます。

  11. アプリケーションプラットフォームとしての利用
  12. HTML Binder は利用者の認証機能を持っています。HTML Binder をアプリケーションプラットフォームとして利用できれば、ウェブアプリケーションの作成において、認証機能の実装を別途行う手間が省けます。アプリケーションプラットフォームとして、どのような機能が標準装備されるべきか考慮が必要です。ちょっとした工夫で大きなメリットが得られます。

    例えば、記事のデータとして任意のデータ項目を格納し、それをページレイアウトの定義で参照できる機能を持たせます。このデータストア機能を用いることで、アプリケーションの構築が容易になります。


(HTML Binder) 2010/08/03 08:40

名前:
コメント:
投稿キー: ※右の文字列を入力してください。