陷入一对多关系的循环依赖

发布于 2024-11-09 04:36:16 字数 390 浏览 0 评论 0原文

所以我正在构建一个系统,其中有一个服务器对象,它生成上传器对象。两者都被定义为协议/接口,无论您喜欢哪个术语。 Server 对象有一个生成 Uploader 并返回它的方法,其签名如下:

- (id)generateUploader;

Uploader 需要包含对创建它的 Server 的引用,因为它需要对服务器的引用才能从我的钥匙串包装器获取密码。因此,它包含一个返回其父服务器的方法:

- (id)parentServer;

当然,这会在两个协议之间创建循环依赖关系。关于如何解决这个问题有什么想法吗?

谢谢!
比利

So I'm building a system in which there is a server object, and it generates Uploader objects. Both are defined as protocols/interfaces, whichever term you prefer. The Server object has a method which generates an Uploader and returns it, with the following signature:

- (id<Uploader>)generateUploader;

The Uploader needs to contain a reference back to the Server which created it, because it needs a reference to a Server to get the password from my keychain wrapper. So, it contains a method which returns its parent Server:

- (id<VayprServer>)parentServer;

Of course, this creates a circular dependency between the two protocols. Any ideas on how to fix this?

Thanks!
Billy

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

恍梦境° 2024-11-16 04:36:16

要打破依赖关系,就像所有循环依赖关系一样,您必须在 .hs 中前向声明内容。特别是:

// VapyrServer.h

@protocol Uploader;

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

and

// VapyrServer.m

#import "Uploader.h"
…

// Uploader.h

@protocol VapyrServer;

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

and

// Uploader.m

#import "VapyrServer.h"
…

这样,两个 .ms 将看到以正确顺序声明的内容。

To break the dependency, like all circular dependencies, you gotta forward-declare stuff in the .hs. In particular:

// VapyrServer.h

@protocol Uploader;

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

and

// VapyrServer.m

#import "Uploader.h"
…

and

// Uploader.h

@protocol VapyrServer;

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

and

// Uploader.m

#import "VapyrServer.h"
…

This way, the two .ms will see things declared in the correct order.

故人如初 2024-11-16 04:36:16

这不一定是反模式。

在树结构(例如 Windows 资源管理器中的资源管理器树)中,树公开了节点的集合,但每个节点都有对树的引用。

This is not necessarily an anti-pattern.

In a tree structure such as the Explorer Tree in Windows Explorer, the Tree exposes a collection of Nodes, but each Node has a reference to the Tree.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文