设计消息系统:关注 public 和私有成员

Design Message System: concern about public and private members

对于面向对象设计问题的面试:设计消息系统,我无法理解 publicprivate 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,如果您的用户正在并发环境中使用,您可能需要某种锁定,如果您直接公开列表的话允许您的内部客户选择创建竞争条件,而如果它们是私有的和封装的,您可以更好地保护您的内部客户。