(Этот вопрос использует PHP в качестве контекста, но не ограничивается только PHP. Например, любой язык со встроенным хешем также имеет значение)
Давайте посмотрим на этот пример (PHP):
function makeAFredUsingAssoc()
{
return array(
'id'=>1337,
'height'=>137,
'name'=>"Green Fred");
}
Versus:
class Fred
{
public $id;
public $height;
public $name;
public function __construct($id, $height, $name)
{
$this->id = $id;
$this->height = $height;
$this->name = $name;
}
}
function makeAFredUsingValueObject()
{
return new Fred(1337, 137, "Green Fred");
}
Метод № 1, конечно, более краткий, однако он может легко привести к ошибке, такой как
$myFred = makeAFredUsingAssoc();
return $myFred['naem']; // notice teh typo here
Конечно, можно утверждать, что $myFred->naem
в равной степени приведет к ошибке, и это правда. Однако, формальный класс мне кажется более жестким, но я не могу это оправдать.
Каковы были бы плюсы / минусы использования каждого подхода и когда люди должны использовать какой подход?