用于在 API 和它的消费者之间传递数据的结构是否应该拥有它的组件? [关闭]

问题描述 投票:0回答:0

假设我有一个结构如下:

struct Employee {
   name: String
}

API 中的两个函数分别接受和返回

Employee

fn add_employee_to_database(employee: &Employee) { }
fn get_employee_from_database() -> Employee { }

如您所见,当我

add_employee_to_database
时,我不需要
Employee
的所有权,因为我不需要读取它的组件并将其保存到数据库中。

但是,当我

Employee
时,我确实将
get_employee_from_database
的所有权放弃给调用者,因为当我从数据库中完成创建它时,它需要移出我的 API 的范围。

但是,同样的灵活性不适用于

Employee
的领域。
Employee.name
拥有它的
String
无论如何。

这种设计在与

add_employee_to_database
交互时给调用者带来了一点麻烦。调用者必须将
String
的所有权放弃给
Employee.name
,即使 API 不需要出于
add_employee_to_database
的目的。调用者可以只
clone
String
,但这不是免费的,性能方面。或者,调用者可以放开
String
并开始通过
Employee
对象引用它,但这会引入一小层样板。

我该如何解决这个问题?

rust ownership
© www.soinside.com 2019 - 2024. All rights reserved.