Застрял в круговой зависимости с отношением один ко многим - PullRequest
0 голосов
/ 19 мая 2011

Итак, я строю систему, в которой есть объект сервера, и он генерирует объекты Uploader.Оба определяются как протоколы / интерфейсы, какой бы термин вы ни выбрали.Объект Server имеет метод, который генерирует Uploader и возвращает его со следующей подписью:

- (id<Uploader>)generateUploader;

Uploader должен содержать ссылку на сервер, который его создал, посколькуему нужна ссылка на сервер, чтобы получить пароль от моей оболочки ключей.Таким образом, он содержит метод, который возвращает его родительский сервер:

- (id<VayprServer>)parentServer;

Конечно, это создает циклическую зависимость между двумя протоколами.Есть идеи, как это исправить?

Спасибо!
Билли

Ответы [ 2 ]

1 голос
/ 19 мая 2011

Чтобы разорвать зависимость, как и все циклические зависимости, вы должны заранее объявить вещи в .hs. В частности:

// VapyrServer.h

@protocol Uploader;

@interface Blah : …
…
- (id <Uploader>) generateUploader;
…

и

// VapyrServer.m

#import "Uploader.h"
…

и

// Uploader.h

@protocol VapyrServer;

@interface MoreBlah : …
…
- (id <VapyrServer>) parentServer;
…

и

// Uploader.m

#import "VapyrServer.h"
…

Таким образом, два .ms увидят вещи, объявленные в правильном порядке.

0 голосов
/ 19 мая 2011

Это не обязательно анти-паттерн.

В древовидной структуре, такой как Дерево обозревателя в проводнике Windows, Дерево предоставляет набор узлов, но каждый узел имеет ссылку на дерево.

...