0

コントローラー自体からロジックを削除する UIViewControllers 間の遷移を整理する良い方法を考え出そうとしています。私が気に入った Pro ObjC Design Patterns の本に基づいてパターンを思いつきましたが、それを改善する方法を知りたいです。

ざっくりとパターン。半疑似コードはご容赦ください。

UINavigation Controller をサブクラス化し、すべての View Controller が遷移する必要があるときに呼び出すメソッドを作成しました。

-(void)requestViewChangeByObject:(id)object withData:(object*)someData{

    if ([object isKindOfClass:[ViewController1 class]]) {
        [self showViewController2Animated:YES withSomeData:nil];    
    }

    if ([object isKindOfClass:[ViewController2 class]]) {
        [self showViewController3Animated:YES withSomeData:someData];
    }

    if...
}

次に、各コントローラーのメソッドを定義しました。インスタンス化してコントローラーをプッシュするだけのものもあれば、プロパティを設定したり情報を渡したりするものもあります。

-(void)showViewController2Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController2 *VC2 = [viewController2 defaultViewController];
    [self pushViewController:VC2 animated:animated];
}

-(void)showViewController3Animated:(BOOL)animated withSomeData:(object*)someDataVariable{

    viewController3 *VC3 = [ViewController3 defaultViewController];
    VC3.someData = someDataVariable 
    [self pushViewController:VC3 animated:animated];
}

私がこのようにしている理由は、設計と要件の変更に応じてコントローラーの順序を変更したり、コントローラーを追加/削除したりするという点で、アプリケーションの柔軟性が大幅に向上するためです。また、アプリを再利用する傾向があるため、スキンを変更して再編成して新しいアプリケーションを構築することが容易になります。

私が抱えている主な問題は、アプリケーションが複雑になればなるほど、すべての if ステートメントでそのメソッドが大きくなることです。リクエストがviewController3からのものである場合にviewController2をプッシュするだけでなく、より多くのロジックが含まれていると混乱する可能性があります。より柔軟で、混乱やエラーを引き起こす可能性が低くなるように、これをどのように改善できるかを本当に知りたいです。

第 2 に、問題にデータの受け渡しを追加する場合、あまり柔軟ではありません。データオブジェクトを受け入れるパラメーターを取り出して、必要なデータの保存/取得を処理する別のシングルトンマネージャーオブジェクトを作成しましたが、これは良い設計ではないことを理解しています。ただし、Appleが提案するようにコントローラー間でデータをやり取りしようとすると(つまり、上記のコードのようにコントローラーにプロパティを設定する)、混乱した混乱になり、これを行うためのより良い方法があるように感じます。

したがって、これに関する提案は大歓迎です。

4

0 に答える 0