Я читал что-то от Билла Карвина (создателя Zend_DB) о моделях, не имеющих непосредственного отношения к таблицам базы данных.(Я думаю, что некоторые разработчики имеют свои модели как прямое расширение Zend_tables или около того, что затрудняет добавление кэширования объектов в memcached, что имеет смысл.)
Итак, Билл Карвин говорил, что Model has
таблицы и таблица isn't a
, но я все еще думаю, что она правильна, поскольку она спроектирована объектно-ориентированным образом.
Например (только пример):
A Monster has 1:M Mouth. a Mouth has 1:M Tooth.
Так что в моей базе данных у меня будет 5 таблиц:
Monster: id, name, type
MonsterMouth: id, monster_id, mouth_id
Mouth: id, size
MouthTeeth: id, mouth_id, tooth_id
Tooth: id, size, shape, sharpness
Затем 3 класса:
class Model_Monster {
private $id, $name, $type, $mouths = array();
public function __construct ($id) {
// Set properties from DB for supplied ID
// Go through DB and add the mouths based on monster ID
}
public function countTeeth () {
// Loop through each $mouths as $mouth and call $mouth->getTotalTeeth();
}
}
class Model_MonsterMouth {
private $id, $size, $teeth = array();
public function __construct($id) {
// Set properties from DB for supplied ID
// Go through DB and add the types of teeth for this mouth ID
}
public function getTotalTeeth () {
// return sizeof($teeth);
}
}
class Model_Tooth {
private $id, $size, $shape, $sharpness;
public function __construct($id) {
// Populate details based on ID passed
}
}
Тогда я угадываю методы подсчета зубов и прочего ...
$monsterId = 1;
$monster = new Monster($monsterId);
// Count total teeth
$totalTeeth = $monster->countTeeth();
Таким образом, у монстра может быть много разных ртов, а у одного рта может быть много разных типов зубов.
После написания этого длинного поста, я думаю, что я правильно понял и что Bill Karwin
речь идет о тех, кто имеет 5 Models
, а не 3
...
У меня есть 5 Tables
, но только 3 Models
, поскольку существуют две таблицы для решения отношений таблицы M: M.
2 of the 3 Models
использовать композицию для хранения многих других типов предметовct.
Если у монстра было 10 ртов от 9 до 10 тысяч примерно 10 различных типов зубов ... это было бы проблемой производительности?Я имею в виду, будет ли PHP видеть это как: a,a,a,a,a,b,b
или 5*a and 2*b
.Если иметь 1-100 КБ объекта и итеративно добавлять их в составной элемент медленно, то, я думаю, у меня должен быть только один случай его появления со свойством number, чтобы сказать, сколько таких типов.
ЕслиТогда я правильно понял, может быть, это поможет другим парням, у которых проблемы с этим.
Спасибо: D Dom