2014-01-15 4 views
0

ok. Я разрабатываю классы в своем приложении.Проектирование пользовательского класса - oop php

У меня есть класс пользователя. Теперь я должен перечислить пользователей, получить информацию о конкретном пользователе и т.д.

Первоначально то, что я пытался сделать это было:

class User 
    { 

    private $userId; 
    private $name; 
    private $age; 

    function __construct() 
    { 
     // the code to get the user details from db and assign it to the properties. 
    } 

    // get the list of all the users 
    public function getUserList() 
    { 
    } 

    // add a new user 
    public function addUser() 
    { 
    } 

    // gets the username 
    public function getUserName($userId) 
    { 
    return $this->name; 
    } 


} 

Это мои сомнения:

  1. ли вы, думаю, что неплохо заполнить свойства из базы данных внутри функции конструктора ? Если бы вы не предложили лучший способ сделать это?

  2. Выполняют ли функции getUserList() и addUser() действительно этот класс? или я должен создать отдельный класс для получения списка пользователей, добавления, удаления пользователей, а затем другого класса для хранения информации для конкретного пользователя? как я должен это конструировать?

Благодаря

+2

Ваши объекты домена не должны заботиться и даже не знать о базе данных. Вы можете взглянуть на шаблон Data Mapper: http://www.martinfowler.com/eaaCatalog/dataMapper.html – lafor

ответ

1

Я думаю, что лучший вариант заключается в создании двух классов, пользователей и пользователя.

class Users implements IteratorAggregate { 
    /** 
    * @return User[] 
    */ 
    public function getUserList() {} 

    public function addUser(User $user) {} 

    /** 
    * @return User 
    */ 
    public function getUser($userId) {} 

    public function getIterator() { 
     return new ArrayIterator($this->getUserList()); 
    } 
} 

class User { 
    public $userId; 
    public $name; 

    public function __construct() {} 
} 
+0

Какой смысл разбить инкапсуляцию в классе 'User'? – Yang

+0

@Jannis: не могли бы вы рассказать мне, почему вы используете IteratorAggregate. Что делать, если я просто вызываю getUSerList(), который возвращает массив? – user1285659

+0

@ user1285659 Вы можете предвидеть класс напрямую, например: $ list = new UserList(); foreach ($ list as $ user) {} –

Смежные вопросы