Architecture 代理对象的设计原则或不同的方法 主要问题:
我编写了一个cli应用程序来与http服务器通信。服务器为我提供了几个端点和这些端点下的一些函数(例如,Architecture 代理对象的设计原则或不同的方法 主要问题:,architecture,rust,Architecture,Rust,我编写了一个cli应用程序来与http服务器通信。服务器为我提供了几个端点和这些端点下的一些函数(例如,/todo/add,/other_endpoint/del)。对库的访问应该表示这些端点(例如master.todo.add(…),master.other_endpoint.del(…)) 我的第一个尝试是添加Master作为对所有端点对象的引用 struct Todo { m: Master } Master将对象保存到所有端点 struct Master { todo:
/todo/add
,/other_endpoint/del
)。对库的访问应该表示这些端点(例如master.todo.add(…)
,master.other_endpoint.del(…)
)
我的第一个尝试是添加Master
作为对所有端点对象的引用
struct Todo {
m: Master
}
Master
将对象保存到所有端点
struct Master {
todo: Todo,
other_endpoint: OtherEndpoint,
server: Server,
}
Master
保存一个服务器
对象以与http服务器通信。因此端点对象可以通过self.master.server.communicate()
调用此服务器对象
但是我驾驶着我那辆生锈的(y)车,撞上了一辆无限大的递归类型“Master”。在此之后,我尝试了一个m:&'a Master
,其中包含了所有的生命周期定义。但是没有成功
我现在有两个问题:
- 当我询问关于这个问题的设计时,这个问题没有得到解决
Todo
和Master
是递归类型,因此大小无限,您需要
在某个点插入间接寻址(例如,框
,Rc
,或&
)
所以你基本上有三个选择:
Master
作为Todo
struct Server {}
struct Todo<'a> {
m: &'a Master<'a>
}
struct Master<'a> {
todo: Todo<'a>,
server: Server,
}
Master
use std::rc::Rc;
struct Server {}
struct Todo{
m: Rc<Master>
}
struct Master {
todo: Todo,
server: Server,
}
使用std::rc::rc;
结构服务器{}
结构待办事项{
m:Rc
}
结构主控{
todo:todo,
服务器:服务器,
}
这是你的三个基本选择。我建议你和他们一起玩,了解他们。。谢谢你的帮助。我还有一些其他问题,但我所描述的问题得到了回答。谢谢@Jdemler。
use std::rc::Rc;
struct Server {}
struct Todo{
m: Rc<Master>
}
struct Master {
todo: Todo,
server: Server,
}