Jeśli używam Class Table Inheritance
znaczenia:
jedna tabela dla produktów, przechowująca atrybuty wspólne dla wszystkich typów produktów. Następnie jedna tabela dla każdego typu produktu, przechowująca atrybuty specyficzne dla tego typu produktu. -Bill Karwin
Które z sugestii Billa Karwina podoba mi się najbardziej. Mogę przewidzieć jedną wadę, którą spróbuję wyjaśnić, jak nie stać się problemem.
Jaki plan awaryjny powinienem mieć na miejscu, gdy atrybut, który jest wspólny tylko dla 1 typu, następnie staje się wspólny dla 2, potem 3 itd.?
Na przykład: (to tylko przykład, a nie mój prawdziwy problem)
Jeśli sprzedajemy meble, możemy sprzedawać krzesła, lampy, sofy, telewizory itp. Typ telewizora może być jedynym typem, jaki posiadamy, który ma pobór mocy. Więc umieściłbym power_consumption
atrybut na tv_type_table
. Ale potem zaczynamy oferować zestawy kina domowego, które również mają swoją power_consumption
właściwość. OK, to tylko jeden inny produkt, więc dodam to pole stereo_type_table
również, ponieważ w tym momencie jest to prawdopodobnie najłatwiejsze. Ale z biegiem czasu, gdy zaczynamy nosić coraz więcej elektroniki, zdajemy sobie sprawę, że power_consumption
jest na tyle szeroka, że powinna znajdować się w main_product_table
. Co mam teraz zrobić?
Dodaj pole do main_product_table
. Napisz skrypt, który przejdzie przez elektronikę i umieść poprawną wartość z każdego type_table
elementu w pliku main_product_table
. Następnie upuść tę kolumnę z każdego type_table
.
Teraz, gdybym zawsze używał tej samej GetProductData
klasy do interakcji z bazą danych w celu pobrania informacji o produkcie; wtedy jeśli jakiekolwiek zmiany w kodzie wymagają teraz refaktoryzacji, powinny dotyczyć tylko tej klasy.