[Undmail-dev 23] Re: プロトタイプの設計

Back to archive index

footashida foota****@users*****
2002年 11月 22日 (金) 21:38:05 JST


footashidaです。こんにちは。
プロト設計お疲れ様です。

>で、次にと言うか平行して考えてたのは、
>簡単に保存形式を変更できる仕組みを提供する事でした。
>まあ、これは保存専用オブジェクトを持たせれば、いいだけなんですけど。
>問題は、保存、読み込みをすべきデータをどうやって取ってくるかです。
>そのために保存形式を仮定ました。
>僕が仮定した保存形式は次の3つです。
>1、すべてを1ファイルに保存する。(本当は除外したかった...)
>2、メールボックスごとに1ファイルに保存する。
>3、メールごとに1ファイルに保存する。
>1、を上手く扱うには、保存用オブジェクトに
>メールボックスを保持させるわけには行きません。
>仕方なく保存用クラスのinterfaceは
>-(BOOL)saveMail:(id)mail intoMailbox:(id)mailbox;
>のように、引数にメールボックスを持たせるようにしなければなりませんでした。
>さらに、保存用オブジェクトに保存場所を保持させるのも難しく、
>メールボックスにその指標を持たせる事にしたのです。
>そこで、mailboxPathに目が行ったのです。
>
>ここまでは、まあいいのですが、おつむの弱い僕には二つの事を同時に考えるのは
>不可能でした。
>もう、mailboxPath=保存場所の指標 の図式がインプットされてしまったのです。
>こうなってしまうともうメロメロです。
>「保存先の基点はユーザーが指定できるべき。けどインスタンスすべてが持つ必要な
>し」
>+(NSString*)rootMailboxPath; // これはまあ普通
>「ん?なんでmailboxPathにrootPathがはいってないんだ?」 // おおボケ
>「を! サブクラスがパスを変更できるようにすれば自然と保存場所が変わるじゃな
>いか!」 // もう何がなんだか。
>
>しかも、そろそろコーディングに入ろうと気がはやって検証すらしてませんでした。
>
>いま、誰が保存先を保持するか再検討中です。

すでに解決されているかもしれませんが、ちょっとだけ案を考えてみました。
採用するかどうかはお任せしますが、良かったら参考にしてください。

基本的な考え方は、
1.保存用オブジェクトは、メール保存先の物理ファイルのパスを知っている。
2.各MailBoxオブジェクトは、自身の論理パス(ルートメールボックスを起点にしたパス)を知っている。
3.MailBoxオブジェクトは、それぞれ保存用オブジェクトを1つ保持する(これは堀さんの考えと違うと思います)
4.MailBoxManagerオブジェクトは、メールの保存方式を知っている。
      各MailBoxオブジェクト生成時に、保存方式に応じて適切な保存用オブジェクトを割り当てる。

保存用オブジェクトは、
>1、すべてを1ファイルに保存する。(本当は除外したかった...)
>2、メールボックスごとに1ファイルに保存する。
>3、メールごとに1ファイルに保存する。
の、3つそれぞれ別クラスで実現します。

・1のクラスは、保存するファイルをフルパスで保持し、すべてのメールをそのファイルに保存。
・2のクラスは、保存するディレクトリをフルパスで保持し、メールボックス毎にファイルを作ります。
・3のクラスは、保存するディレクトリをフルパスで保持し、そこを起点にメールボックスの論理パス名と
  同じ階層のディレクトリを作って、そこに1通のメールを1ファイルで保存します。

MailBoxクラスは、初期化メソッドとして以下を持ちます。
-(id)initWithMailFileManager:(MailFileManager *)mailFileManager

メールボックスの新規作成を行うときに、
MailBoxManagerがMailBoxのインスタンスを生成し、
上の初期化メソッドを使用して、ユーザーが指定した保存形式に応じたMailFileManagerの
インスタンスをセットします。

メールをメールボックスに保存する場合は、こんな感じになります。
1.MailBoxオブジェクトの、saveMail:(id)mailData(仮称)を呼び出す
2.MailBoxオブジェクトは、自分の保持するMailFileManagerオブジェクトの保存メソッドを呼ぶ。
  こんな感じで。
  [mailFileManager saveMail:mailData intoMailbox:self];
3.MailFileManagerオブジェクトは、saveMail:intoMailメソッドの中で
  ファイル形式に応じてメールの保存を行う。
  必要なら、mailboxPathを、MailBoxから取得して保存に使用する。

なんか、うまく説明できていないような気がしますが・・・
よく分からなかったらおっしゃってください。
一応、上記の用にすれば、保存方式をMailBoxが気にせずに実装できて、
なおかつ1ファイル形式にも適用できる、のではないかな〜と思います。
(すいません、ちゃんと検証はしてないです)

  
>ADCより抜粋
>
>Note: NSSerializer is obsolete and has been deprecated in Mac OS X 10.2. Use
>NSPropertyListSerialization instead.
>
>だそうです。
>バージョンチェックしてごちょごちょやるより
>アーカイブにしちゃうほうが楽ですので。

なるほど・・・
シリアライズとアーカイブって、何が違うのかな。

ではまた。



Undmail-dev メーリングリストの案内
Back to archive index