正确处理类似但不同类型的对象(如用户帐户)的方法

时间:2015-06-20 21:53:58

标签: php

我正在开始一个新的网络项目。我对处理用户帐户有一些疑问。我有一些基本的OOP知识,但有PHP的新知识。

我的情景非常熟悉。将有两种不同类型的帐户。客户和公司。他们将拥有一些共享和特定的属性。 在数据库中,我将使用三个表来存储用户数据。一个用于共享属性。其他人将获得有关用户类型的具体信息。

shared_data

+---------+-----------------------+---------------+----------+----------+--------+
| user_id |         email         |   user_name   | password |   type   | active |
+---------+-----------------------+---------------+----------+----------+--------+
|       1 | mail@supercompany.com | Super Company | secret   | company  |      1 |
|       2 | mail@boldcompany      | Bold Company  | cetres   | company  |      1 |
|       3 | johndoe@mail.com      | John Doe      | retsec   | customer |      1 |
|       4 | janedoe@mail.com      | Jane Doe      | setrec   | customer |      1 |
+---------+-----------------------+---------------+----------+----------+--------+

company_only_data

+---------+-----------------+------------------+
| user_id | company_address | person_in_charge |
+---------+-----------------+------------------+
|       1 | Berlin          | Steven Seagal    |
|       2 | Budapest        | Chuck Norris     |
+---------+-----------------+------------------+

user_only_data

+---------+--------+--------------+
| user_id | gender | last_shoping |
+---------+--------+--------------+
|       3 | male   | never        |
|       4 | female | yesterday    |
+---------+--------+--------------+

我不想重新发明这一点。由于用户处理是网络编程的重要步骤之一,我认为我找到了关于该主题的更好资源。我读了许多文章,包括" 抽象类和接口"但没有一个是清楚的。

我的计划是构建如下

class UserManager
{
    private $user_id;

    public function __construct($user_id)
    {
        $this->user_id = $user_id;
    }

    public function getData()
    {
        //Return joined data of shared_data table
        //and second table (based on type of account)

    }

    public function deactivate()
    {
        //Update shared_data set active=0 WHERE user_id = $this->user_id
    }

    public function login()
    {
        //...
    }

    public function logout()
    {
        //...
    }
}

class CustomerManager extends UserManager
{
    public function getShoppingData()
    {
        //Return results of shopping_data table for $this->user_id
    }

    //...some other customer related methods
}

class CompanyManager extends UserManager
{
    public function getSalesReport()
    {
        //Work with results of sales_data table for $this->user_id
    }

    //...some other company related methods
}

我是在正确的轨道上还是做错了什么?

你能否建议我一些记录良好的链接,或者建议我采用一种方法?

1 个答案:

答案 0 :(得分:0)

您应该使用界面来设置常用方法和属性。通过使用接口,您可以确保所有类都具有应用逻辑所需的最小方法和属性集(如登录,注销,commonDetails等)