[Undmail-dev 9] はじめまして & 実装案

Back to archive index

Hori,Masaki masak****@users*****
2002年 10月 31日 (木) 23:56:44 JST


はじめまして、堀です。
よろしくお願いします。

勝手に実装案を考えてみました。
あくまで案ですので却下して頂いて結構です。

実装案
拡張性を高めるため本体のクラスはPlug-inから隠ぺいする。
本体はsingletonとする。
本体は所定のプロトコルを採用する。
本体は各Plug-inの橋渡し役に徹する。全Plug-inを総括的にラップしたものと考えても良い。
本体はNSApplicationをカテゴライズし、+(id)sharedMainController;を実装する。これはあらゆるところから本体 
にアクセス可能にするため。

上記実装案による実装例(骨組みだけです)

----unnamedMailInterface.h---
@protocol POPEngine
// any
@end
@protocol POPController
-(void)setPOPEngine:(id <POPEngine>)engine;
// and any.
@end

@protocol MainController <POPController,SMTPController,anyProtocol>
// any
@end


@interface NSApplication (UnnamedMailInterface)
+(id)sharedMainController;
@end

----MainController.h----
// このファイルの外部参照を禁止する。
// 独立性を上げるためMainControllerは可能な限り個別のクラスに実際の処理を任せる。
@interface MainController <MainController> : NSObject
{
id <POPController> POPController;
id <SMTPController> SMTPController;
// and any.
}
@end

----MainController.m----
static id _instance = nil;
@implementation MainController
+(id)sharedInstance
{
if(_instance) return _instance;
return [[self alloc] init];
}

-(id)_privateInit
{
if(!_instance) {
  _instance = [super init];
  if(_instance) {
   // initialize
  }
} else {
  [self release];
}
return _instance;
}

-(id)init
{
return [self _privateInit];
}

-(id)retain
{
return _instance;
}

-(oneway void)release{}

-(unsigned)retainCount
{
return UINT_MAX;
}

@end

@implementation NSApplication (UnnamedMailInterface)
+(id)sharedMainController
{
return [MainController sharedInstance];
}
@end


------SomePlugin.m-------

-(id)init
{
self = [super init];
if(self) {
  // Plug-inはコントローラーのクラスを知らない。
  [self setMainController:[NSApplication sharedMainController]];
  // initialize
}

return self;
}


#間違って管理用アドレスに投げてしまいました。
#ヘッダからコピペする時コピーする場所を間違えました。すみません。




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