Hibernate+Springboot - problem projektowy (eliminacja dziedziczenia?)

0

Tytuł taki nic niemówiący w sumie, ale ciężko mi to nazwać jednym zdaniem. Cel jaki chcę osiągnąć to formularz www, który narzuca userowi pola, które ma wypełnić, ale liczba/rodzaj/opis tych pól jest możliwa do zmiany przez admina (bez ingerencji w kod). Czyli np. mamy formularz konfiguracji wyboru samochodu (punkt wyjścia) i jednocześnie klasę:

class Samochod{
    String typ;
    boolean klimatyzacja; 
    String kolor;
} 

no teraz mogłyby się pojawić różne samochody, które mają różne własności, czyli pola klasy np.

class NissanMicra extends Samochod{
    boolean smiesznaNaklejka;
}
class MercedesS {
    boolean pokrowiecNaKapcie;
    List<JakasKlasa> cosFajnego;
}

Oczywiście to zadziała, ale jak dojdzie nowy model samochodu to trzeba dopisać nową klasę i prawdopodobnie nowy formularz. Pytanie w jaki sposób zaprojektować aplikację, aby administrator mógł sam dodawać nowe typy samochodów, a formularz dynamicznie dostosowywał do danych. Na razie jedyny pomysł jaki mi przychodzi do głowy to coś w ty stylu:

class Samochod{
    String model;
    List<PoleString> teksty;
    List<PoleRadio> radio;
}
class SamochodSchemat{
    String model;
    List<PoleString> teksty;
    List<PoleRadio> radio;
}
class PoleString{
    String nazwa;
    String wartosc;
}
class PoleRadio{
    String nazwa;
    boolean wartosc;
}

Tworzymy SamochodSchemat dla każdego modelu jaki chcemy mieć w bazie, a jak mamy wyświetlić formularz to tworzymy obiekt Samochod i rzutujemy na niego wybrany SamochodSchemat. Nie wiem czy to zadziała, ale powinno. Jedyny 'problem' to fakt, że na formularzu dostaniemy pogrupowane pytania: wszystkie tekstowe obok siebie, wszystkie radio obok siebie (choć można by to rozwiązać jakoś na przykład javascriptem - ale to najmniejszy problem).

No ale to tylko mój pomysł i dam sobie rękę obciąć, że właśnie próbuje wymyślić koło :) Będę wdzięczny za wszystkie podpowiedzi.

0

Wszystko zależy od konkretnego problemu. Nie wiem co w ogóle to ma wspólnego z Hibernate i Springiem, bo ty pytasz o podstawy OOP...
Mógłbyś zrobić np.

public class Car{
    private final List<Component> carComponents;
}

I niech każdy taki specjalny nowy komponent samochodu implementuje interfejs Component. I niech ten Component opisuje w jakiś sposób co to jest za pole, jak wprowadzać do niego dane itd.

0

Ja bym radził się zapoznać z takimi pojęciami jak: polimorfizm, kompozycja i np. wzorzec strategia.

1 użytkowników online, w tym zalogowanych: 0, gości: 1