Я работаю над переписыванием большого, ужасно написанного php-приложения в rails.Мы работаем с приложением уже несколько лет, и теперь у нас есть четкое представление о том, что оно на самом деле должно делать, поэтому я стремлюсь начать с чистого листа и наконец получить надежную базу кода для поддержки нашего приложения.
Одна вещь, которую я пытаюсь выяснить, - это как справиться с некоторыми функциями, которые есть во многих наших моделях.Приложение представляет собой веб-приложение для нескольких компаний, и каждая компания (и все пользователи), которые используют приложение, имеют множество предпочтений и пользовательских поисков.Предпочтения просты, я планирую просто настроить модель предпочтений для пользователей и компаний и составить эти таблицы ключей / значений.Хотя я немного больше борюсь с нашими моделями поиска.Взять, к примеру, статус.В типичном приложении у вас будет таблица состояния, и с ней можно покончить.В нашем случае статус может меняться в зависимости от компании вошедшего в систему пользователя.
В текущем приложении, я думаю, это реализовано довольно плохо.По сути, у нас есть таблица и модель состояния со столбцом company_id.Мы предоставляем набор статусов по умолчанию, с company_id = -1.Затем, если компания переопределяет их, мы сохраняем записи в таблице с их company_id.В приложении мы извлекаем их через хранимые процедуры, которые мы в основном передаем в company_id, и он возвращает либо записи по умолчанию, либо записи, специфичные для компании.
Я не фанат этого, в основном потому, что он делаеттрудно легко получить доступ к данным.В частности, наличие в таблице значений по умолчанию и специфичных для компании параметров означает, что вы не можете выполнить простой запрос для получения списка статусов, это может быть либо 2 запроса (для company_id, а затем, если нет результатов, для -1), либосложный запрос / процедура, выполняющая подсчет и оператор if в sql.С другой стороны, он допускает легкие отношения, так как другие объекты могут ссылаться на status_id и получать любой статус в таблице.
У нас есть эта функциональность, вероятно, на дюжине различных моделей, поэтому япытаясь придумать хорошую модель для этого, которая может быть легко реализована на любой модели.
Есть ли у кого-нибудь предложения о том, как лучше это реализовать?