Я нахожусь в процессе замены фреймворка для довольно сложного бизнес-веб-приложения. Наше приложение работает на платформе LAMP, и новая среда будет расширением CodeIgniter. В своих исследованиях по разработке структуры я решила изучить ORM, я никогда раньше не работала с ORM, и я хотела знать, если это будет ценным для нашего приложения. Затем я наткнулся на очень интересное сообщение в блоге под названием «Почему я не использую ORM». Этот блог, похоже, подтвердил многие мои опасения по поводу использования ORM, и в нем также было представлено решение, похожее на то, что я уже планировал. .
Под "словарем данных" я планирую использовать это определение из "Программист базы данных" blog:
Термин «словарь данных» используется многими, в том числе и мной, для обозначения отдельного набора таблиц, который описывает таблицы приложений. Словарь данных содержит такую информацию, как имена столбцов, типы и размеры, а также описательную информацию, такую как заголовки, подписи, первичные ключи, внешние ключи и подсказки для пользовательского интерфейса о том, как отображать поле.
Таким образом, при выборе «словаря данных» вместо ORM я могу проявлять тенденцию к подтверждению, независимо от причин, по которым я устал от ORM:
- Я никогда раньше не пользовался ORM, я мало что знаю об этом.
- Этот фреймворк нужно построить довольно быстро, у моего босса мало времени, и мне нужно создать работающее приложение, которое позволит плавно перейти на более современный фреймворк.
- Мой начальник уже думает, что я перерабатывал эту структуру (поверьте мне, я не очень близок к этому) и параноидален по поводу структуры, которая мешает нам делать то, что нам нужно, и создает ошибки, которые мы не может решить в течение необходимого количества времени. Пока я плохо справлялся с ним, убеждая его в том, что изменения - это хорошо, но я не очень эффективный продавец, и хотя другие разработчики могут помочь мне, босс все еще нуждается в большой уверенности.
- Наш старый фреймворк - процедурный, наш код - PHP, и наши разработчики очень хорошо знают SQL. ORM будет большим изменением.
- В нашей базе данных есть десятки таблиц, многие из которых содержат сотни тысяч записей на довольно старом сервере. В прошлом мы были сожжены кодом, который повторял опрос базы данных в цикле вместо того, чтобы делать один запрос, чтобы извлечь все необходимые данные одновременно. Избежать этой проблемы с помощью SQL, написанного вручную, довольно просто. Обеспечение того, чтобы это всегда происходило в случае необходимости с ORM, мне неизвестно и кажется рискованным.
Несмотря на это, решение словаря данных кажется мне очень многообещающим, так как этот пост в блоге "Использование словаря данных" , кажется, предоставляет много полезных функций и некоторые из них, которые являются требованиями новой платформы. Вот мои причины, по которым я предпочитаю решение для словаря данных:
- Реализация правил контроля доступа в самих строках таблицы была бы неоценима.
- Также было бы полезно автоматически сгенерировать изменения базы данных, документацию и проверку схемы.
- Одним из требований платформы является общая функция истории данных / аудита, которая может применяться к любой подфункции в нашем приложении. Словарь данных или эквивалент по существу требуется для предоставления такой функции. История должна содержать подробную информацию о структуре и типах данных в базе данных.
- Наши системы содержат широкий спектр типов данных, которые были бы более правильно адресованы, если бы они рассматривались как формальные типы в приложении. Во-первых, фрагменты HTML (которых у нас много в наших данных, они необходимы) должны быть закодированы как сущности в некоторых случаях, декодированы как HTML в других, проанализированы для ссылок и изображений в некоторых случаях и всегда проверены на правильность. Кроме того, существуют даты, измерения, валюта и различные другие поля, которые могли бы получить четкое определение в коде того, как следует манипулировать этими данными.
Идея словаря данных, которую я хотел бы реализовать, была бы последовательностью объектов в отдельных файлах PHP, и было бы много ООП, однако она будет использоваться так, как это очень похоже на концепцию словаря данных, представленную в " Блог программиста ». Это будет единственное исходное определение полной схемы базы данных для всей инфраструктуры.
Теперь мой вопрос: я пропускаю значение ORM или это тот случай, когда словарь данных является подходящим инструментом для работы?