Если я использую Class Table Inheritance
значение:
одна таблица для продуктов, сохраняющая атрибуты, общие для всех типов продуктов. Затем одна таблица для каждого типа продукта, сохраняющая атрибуты, специфичные для этого типа продукта. -Bill Karwin
blockquote>Мне нравятся лучшие предложения Билла Карвина. Я могу предвидеть один из недостатков, который я попытаюсь объяснить, как не стать проблемой.
Какой план непредвиденных обстоятельств должен иметь место, когда атрибут, который является общим для 1 типа, затем становится общим для 2, затем 3 и т. д.?
Например: (это просто пример, а не моя реальная проблема).
Если мы продаем мебель, мы можем продавать стулья, лампы, диваны, телевизоры и т. д. Тип телевизора может быть единственным типом, который мы носим с потреблением энергии. Поэтому я бы поместил атрибут
power_consumption
вtv_type_table
. Но затем мы начинаем носить системы домашнего кинотеатра, которые также обладают свойствомpower_consumption
. OK его только один другой продукт, поэтому я добавлю это поле вstereo_type_table
, так как это, вероятно, проще всего на этом этапе. Но со временем, когда мы начинаем носить все больше электроники, мы понимаем, чтоpower_consumption
достаточно широка, чтобы она была вmain_product_table
. Что мне теперь делать?Добавьте поле в
main_product_table
. Напишите сценарий для прокрутки электроники и установите правильное значение с каждогоtype_table
наmain_product_table
. Затем отпустите этот столбец из каждогоtype_table
.Теперь, если я всегда использовал один и тот же класс
GetProductData
для взаимодействия с базой данных, чтобы вытащить информацию о продукте; то, если какие-либо изменения в коде теперь нуждаются в рефакторинге, они должны быть только для этого класса.