设计消息系统:关注 public 和私有成员
Design Message System: concern about public and private members
对于面向对象设计问题的面试:设计消息系统,我无法理解 public
和 private
members/method 每个 [=25= 的一些用途].
长话短说。假设我们定义用户 class 如下。
class user {
public:
string account_name;
string info;
vector<User> friend_list;
vector<Chat> chat_list;
void friend_request(User friend_target);
private:
string system_user_id;
}
我想知道,首先应该有 private
成员吗?
在这里,我将 system_user_id
定义为私有的,因为它不应该暴露给系统的真实用户。大家怎么看?
我发现另一件有用的事情是考虑封装,因为它适用于 user
class 的客户端,而不仅仅是外部用户。
客户可以是内部用户。想象一下,几个月后您的用户成为互联网上最受欢迎的东西,并且您有一个开发团队在您的系统上工作。
他们看到一个用户 class public account_name
。他们想更改帐户名称,以便直接更新它。但是,如果有效更新需要与数据存储或其他东西同步怎么办?用户 class 设计允许客户端(内部)创建错误代码!!
同样适用于 friend_list、chat_list,如果您的用户正在并发环境中使用,您可能需要某种锁定,如果您直接公开列表的话允许您的内部客户选择创建竞争条件,而如果它们是私有的和封装的,您可以更好地保护您的内部客户。
对于面向对象设计问题的面试:设计消息系统,我无法理解 public
和 private
members/method 每个 [=25= 的一些用途].
长话短说。假设我们定义用户 class 如下。
class user {
public:
string account_name;
string info;
vector<User> friend_list;
vector<Chat> chat_list;
void friend_request(User friend_target);
private:
string system_user_id;
}
我想知道,首先应该有 private
成员吗?
在这里,我将 system_user_id
定义为私有的,因为它不应该暴露给系统的真实用户。大家怎么看?
我发现另一件有用的事情是考虑封装,因为它适用于 user
class 的客户端,而不仅仅是外部用户。
客户可以是内部用户。想象一下,几个月后您的用户成为互联网上最受欢迎的东西,并且您有一个开发团队在您的系统上工作。
他们看到一个用户 class public account_name
。他们想更改帐户名称,以便直接更新它。但是,如果有效更新需要与数据存储或其他东西同步怎么办?用户 class 设计允许客户端(内部)创建错误代码!!
同样适用于 friend_list、chat_list,如果您的用户正在并发环境中使用,您可能需要某种锁定,如果您直接公开列表的话允许您的内部客户选择创建竞争条件,而如果它们是私有的和封装的,您可以更好地保护您的内部客户。