0

スタッカーの皆さん、こんにちは。

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

これらのオブジェクトのいずれかを初期化しようとすると、問題が発生します。それらは循環的に依存しているため、鶏と卵のシナリオのようなものです。

4

1 に答える 1