У меня есть класс NoteEntity
, который предназначен для представляет строку в моей таблице notes
. Объект «(данных)» в моей структуре строго означает запись/сохранение данных - строку базы данных, если хотите. Создание такого объекта так же просто, как и инициализация его массивом, возвращаемым mysqli_fetch_array()
, что требует от меня совпадения свойств объекта с именами столбцов моей таблицы.Хорошая практика иметь геттер для каждого свойства в классе, представляющем строку, или мне нужно исследовать другой подход?
Конструктор наследуется от родительского класса DataEntity
:
PHP код
public function __construct($row_array)
{
foreach ($row_array as $column => $value)
{
if (property_exists($this, $column))
{
$this->$column = $value;
}
else
{
trigger_error(get_class($this) . " has no attribute called '$column'.", E_USER_NOTICE);
}
}
}
Как вы можете видеть, все это делает, это отображение соответствующих столбцов в соответствующие свойства объекта.
Это хорошо для меня, так как класс NoteEntity
определяется только один раз, и поэтому легко изменить его внутренние работы, если столбцы таблицы будут меняться. Но это также требует, чтобы я использовал метод getter для каждый и каждый свойство, если я не хочу, чтобы весь мой код зависел от имен столбцов данной таблицы.
Вопрос идет как: Хорошая практика иметь геттер для каждой собственности, или я должен исследовать другой подход? Я прошу об этом с точки зрения производительности, но я бы хотел, чтобы мой код был как можно более удобным.
Причина я обеспокоен производительности в том, что если он получает немного занят, получая свойства быстро становится:
PHP код
foreach ($notes as $note_entity)
{
$template->Process(array(
'note_name' => $note_entity->GetName(),
'note_ext' => array_pop(explode('.', $note_entity->GetFilename())),
'subject_id' => $note_entity->GetSubjectID(),
'subject_name' => $note_entity->GetSubject(),
'institute_id' => $note_entity->GetInstituteID(),
'institute_nick' => $note_entity->GetInstitute(),
// ...
));
}
... что может быть хорошо для несколько десятков заметок, но ожидается, что их счет будет равен тысячам за запрос, который добавляет значительный вызов функции вызова. Настоящая версия чрезвычайно удобна в использовании, потому что она не является частью кода, который необходимо сохранить в именах столбцов.
Возможные решения, которые я придумал включать подход, который возвращает каждый, или подмножество каждого свойства в ассоциативном массиве. Это имеет следующие незначительные недостатки:
- возвращающиеся только подмножество данных создают неявные логические зависимости между
NoteEntity
и где он используется, если разыскиваемое подмножество варьируя между призывающими местами, - возвращается все свойства создает ненужный поток данных, который никогда не будет использоваться,
- Обновление конфигурации colum увеличивает стоимость ремонтопригодности, так как нам также необходимо обновить структуру возвращаемого массива.