Предположим, у меня есть объект клиента, который имеет все стандартные свойства клиента (имя, адрес, контакт и т. Д.). Мы получаем нового клиента (Acme), у которого есть очень специфический запрос, который мы высылаем на счет-фактуру, который имеет наш идентификатор в виде штрих-кода. Мы не хотим этого для всех других клиентов, поэтому мы намерены сделать это как особый случай для Acme. Теперь давайте предположим, что многие клиенты имеют эти небольшие одноразовые запросы. Что бы лучший способ режима эти данные:Специальные свойства объекта и нормализация базы данных
Я вижу пару возможностей и их преимущества/компромиссы:
1) Запрограммированные в точке отклонения, проверка для идентификатора или имени клиента.
Преимущества: Наименьшее усилие, единственная точка интеграции
Компромиссы: неаккуратный код, сильно подверженный ошибкам. Для изменения флажков требуется новое развертывание. Трудно найти отклонения по мере роста свойств.
2) Столбцы БД на Клиенте для каждого объекта. Флаги будут установлены как истинные для одного клиента, а для остальных - ложные.
Преимущество: относительно просто, свойства могут быть изменены «на лету»
Компромисс: делает очень широкие базы данных и неряшливую схему. По мере добавления дополнительных свойств данные становятся все более неуправляемыми. Код также будет неаккуратным, так как многие ненужные свойства должны быть сопоставлены.
3) Отображение жестко заданных свойств. Карта, которая обладает специальными свойствами для клиентов. Затем карту можно запросить для специальных свойств, и поток кода может идти оттуда.
Преимущества: Единая точка управления.
Недостаток: жесткий. Идентификаторы клиентов/Имена будут в коде. Для внесения изменений требуется развертывание.
4) Таблица CustomerProperty с столбцами ключа/значения.
Преимущества: Чистота. Единая точка управления. Динамический.
Недостатки: Относительный комплекс, по сравнению с другими решениями.
Очевидно, что выбор будет зависеть от обстоятельств. Если у нас будет сотни отклонений, важно иметь единую точку управления. Если бы это было действительно одноразовое отклонение, я думаю, что № 1 будет в порядке, хотя и хакерским.
У меня есть мнение о том, что лучше в этом случае .... но я хотел бы знать мнения других.
2, и, возможно, 1, работают достаточно хорошо для одноразовой ситуации. Но вы специально сказали: «Предположите, что многие клиенты имеют эти небольшие одноразовые запросы», а это означает, что это повторяющаяся ситуация, которую вам нужно будет поддерживать со временем, и, на мой взгляд, 4 - это путь. Определенно используйте модель, подобную lumpynose, содержащую множество описательной информации по каждому конкретному случаю. –