1

私は始めたばかりで、追加の引数Typhoonを使用してコンストラクターを書き続けるのが面倒であることに気付きました。したがって、私のものをシングルトンassemblyにするのは魅力的です。TyphoonAssemblyしかし、どの例でもそれが行われたことはまだありません。また、アセンブリを提供するためにコンストラクターまたはプロパティの注入が使用されている例も見ています。ですから、それに対する訴訟があるかもしれません - それはちょっと悪いように見えますが、どれほど悪いかはわかりません.

だから私の質問は:

  1. TyphoonAssemblyをシングルトンにすることに反対する強力なケースはありますか?
  2. フレームワーク内でそうする方法はありますか、それともいつもの方法で行うべきですか?

編集:私は始めたばかりですが、ApplicationAssembly次のように使用される単一の(今のところ)があるとしましょう:

- (NavigationController *)customDefaultNavigationController {
    return [TyphoonDefinition withClass:[NavigationController class]
            configuration:^(TyphoonDefinition *definition) {
                [definition useInitializer:@selector(init)];
            }];
}

- (id<IRootWireframe>)rootWireframe {
    return [TyphoonDefinition withClass:[RootWireframe class]
            configuration:^(TyphoonDefinition *definition) {
                [definition useInitializer:@selector(init)];
            }];
}

特筆すべきことは何もありませんが、要点は、まだ "Hello World" レベルの機能を維持している新しいアプリケーションに、このアセンブリのクライアントが少なくとも 3 つまたは 4 つあるということです。

今後、アセンブリ パラメーターを使用してイニシャライザーを記述する必要がある場合は、それを行いますがApplicationAssembly、シングルトンを作成する (またはオブジェクトにスコープを設定する) だけで済む場合は、そうします。

4

1 に答える 1

1

アセンブリをシングルトンにしても何も壊れることはないと思いますが、決して必要ではありません。アセンブリには、オブジェクトをインスタンス化するためのレシピまたは設計図が含まれており、起動時に舞台裏で、このすべての情報がTyphoonComponentFactory. この時点で、アセンブリ自体は基本的にその仕事を終えており、要求されたときにスコープ キャッシュされたインスタンスをビルドまたは発行するのは TyphoonComponentFactory の役割です。. .

. . 起動後も引き続きアセンブリ インターフェイスを使用するため、「マジック ストリング」に頼る必要はありませんが、これにより、Objective-C メッセージが TyphoonComponentFactory のcomponentForKeyメソッドに転送されるだけになります。

次の 2 つの方法のいずれかで Typhoon (またはライブラリなど) をブートストラップできます。

plist 統合の使用

これは、アプリケーション全体で TyphoonComponentFactory のインスタンスが 1 つあることを意味します。

手動で

例えば:

MiddleAgesAssembly *mainAssembly = [[MiddleAgesAssembly new] 
    activateWithCollaboratingAssemblies:@[
      [QuestsAssembly new]
    ]];

この場合、TyphoonComponentFactoryを必要なだけ保持するかどうかはユーザー次第であり、アプリの場合は通常、アプリのライフサイクル全体にわたって保持されます。今のところ、アプリ デリゲートに保持することをお勧めしますが、慣れてきたら、あるオブジェクト グラフから別の.

したがって、Typhoon をブートトラップするどちらの方法でも、アセンブリがシングルトンであることには何の利点もありません。(実際、plist 統合スタイルの場合、これは単純に無視されます)。

于 2015-06-16T09:38:14.773 に答える