radioheaded
PHP нуб
Хочется услышать мнения относительного того, как именно вы предпочитаете маппить данные, требующие некоторого преобразования.
Сразу оговорюсь: представим, что речь идет о легаси коде, который очень тяжело изменить и в котором маппинг по сути выполняется руками, ибо в объектах нет никакой информации о типах полей, а притащить сюда какой-либо ORM вообще без шансов.
Приведу пример и варианты.
В таблице есть поле типа SET (назовем его s), есть логичное желание маппить его в массив, ибо с массивами удобнее работать. Итак, из базы мы получаем строку значений, разделенных запятыми. Есть несколько вариантов работы в этом случае.
1. В объекте храним всегда только массив (преобразованные данные). Тогда при получении данных из базы все такие поля преобразуем в массив, при сохранении объекта обратно собираем строку из массива. Так удобно работать, но приходится прописывать преобразование в методах выборки и изменения данных. Почему — еще раз читаем выше со слом «сразу оговорюсь». Еще, если задуматься о производительности (да-да, экономия на спичках), то здесь мы делаем лишние действия, которые, возможно, не будут востребованы.
2. В объекте храним строку (то есть данные в том виде, в котором они пришли к нам из базы), а в геттерах и сеттерах прописываем логику преобразования. Тогда данные в объекте всегда готовы к вставке/изменению в базе единым способом, никаких дополнительных преобразований уже не требуется. И здесь преобразование выполняется только тогда, когда это действительно нужно. Но зато, если с полем будет выполняться несколько изменений, то будет выполнено несколько лишних преобразований.
3. Ну и все равно найдется кто-то, кто скажет, что можно предварительно готовить схему маппинга с типами и прочими данными, тогда все будет автоматически в обе стороны работать хорошо, поэтому вынесу отдельным вариантом. По сути, это первый универсализированный вариант.
На самом деле, у меня такой проблемы нет, просто захотелось поговорить. Привет ) Так что скажете?
Сразу оговорюсь: представим, что речь идет о легаси коде, который очень тяжело изменить и в котором маппинг по сути выполняется руками, ибо в объектах нет никакой информации о типах полей, а притащить сюда какой-либо ORM вообще без шансов.
Приведу пример и варианты.
В таблице есть поле типа SET (назовем его s), есть логичное желание маппить его в массив, ибо с массивами удобнее работать. Итак, из базы мы получаем строку значений, разделенных запятыми. Есть несколько вариантов работы в этом случае.
1. В объекте храним всегда только массив (преобразованные данные). Тогда при получении данных из базы все такие поля преобразуем в массив, при сохранении объекта обратно собираем строку из массива. Так удобно работать, но приходится прописывать преобразование в методах выборки и изменения данных. Почему — еще раз читаем выше со слом «сразу оговорюсь». Еще, если задуматься о производительности (да-да, экономия на спичках), то здесь мы делаем лишние действия, которые, возможно, не будут востребованы.
2. В объекте храним строку (то есть данные в том виде, в котором они пришли к нам из базы), а в геттерах и сеттерах прописываем логику преобразования. Тогда данные в объекте всегда готовы к вставке/изменению в базе единым способом, никаких дополнительных преобразований уже не требуется. И здесь преобразование выполняется только тогда, когда это действительно нужно. Но зато, если с полем будет выполняться несколько изменений, то будет выполнено несколько лишних преобразований.
3. Ну и все равно найдется кто-то, кто скажет, что можно предварительно готовить схему маппинга с типами и прочими данными, тогда все будет автоматически в обе стороны работать хорошо, поэтому вынесу отдельным вариантом. По сути, это первый универсализированный вариант.
На самом деле, у меня такой проблемы нет, просто захотелось поговорить. Привет ) Так что скажете?