スタッカーの皆さん、こんにちは。
TDD を使用して iOS アプリに MVC を実装しようとしていますが、モデルとコントローラーの間、およびコントローラーとビューの間で循環依存関係が発生し続けています。図に示す Cocoa MVC パターンに厳密に一致させたいと考えています。Apple ドキュメントの 7.2 ( https://developer.apple.com/library/ios/documentation/general/conceptual/CocoaEncyclopedia/Model-View-Controller/Model-View-Controller.html )。
この問題は、init に対する私の tdd 要件から発生します。つまり、すべての依存関係を持つすべての MVC オブジェクトです。テスト中にモックを代用できるように、すべての依存関係を初期化する必要があります。これが私の問題の簡単な例です。
意見:
exampleView.h
//exampleView.h
#import <UIKit/UIKit.h>
#import "exampleViewController.h"
@interface exampleView : UIView
- (id)initWithFrame:(CGRect)frame andVC:(exampleViewController *)VC;
- (void) updateLabelText:(NSString *)newText;
@end
exampleView.m
//exampleView.m
#import "ExampleView.h"
#import "ExampleViewController.h"
@interface exampleView ()
@property (nonatomic) UILabel *label;
@property (nonatomic) UIButton *button;
@property (nonatomic) exampleViewController* VC;
@end
@implementation exampleView
// use your imagination...
@end
コントローラ:
//exampleViewController.h
#import <UIKit/UIKit.h>
#import "ExampleModel.h"
#import "ExampleRootView.h"
@interface ExampleViewController : UIViewController
- (id) initWithView:(exampleView *)view andModel:(ExampleModel*)model;
- (void) userActionButtonTapped();
@end
モデル
//exampleModel.h
#import "exampleViewController.h"
@interface exampleModel : NSObject
-(id)initWithVC:(UIViewController *)VC;
//other model type stuff
@end
これらのオブジェクトのいずれかを初期化しようとすると、問題が発生します。それらは循環的に依存しているため、鶏と卵のシナリオのようなものです。