Hibernate+Springboot - problem projektowy (eliminacja dziedziczenia?)

Hibernate+Springboot - problem projektowy (eliminacja dziedziczenia?)
P5
  • Rejestracja:ponad 10 lat
  • Ostatnio:ponad 6 lat
  • Postów:28
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ę:

Kopiuj
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.

Kopiuj
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:

Kopiuj
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.

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
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.

Kopiuj
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.


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
edytowany 1x, ostatnio: Shalom
PI
Mógłbyś rozwinąć swój przykład?
Shalom
Bez konkretnego problemu? Nie.
P5
Starałem się napisać jak najwięcej na temat mojego problemu dlatego napisałem że hibernate i springboot - jaki ma wpływ (czy ma) kompletnie nie wiem :) Za słaby jestem. Dołączam się do prośby Pinka. Jeżeli mógłbyś rozwinąć temat to by było super (albo jak masz jakiś link do tutoriala to już w ogóle bosko by było). Uprzedzając....tak, umiem używać google :p :) ale wszystko co znajduje dotyczy np Swinga. Może ewentualnie jakieś dodatkowe wskazówki do Googla, bo nawet nie wiem czego szukać.
NS
  • Rejestracja:ponad 7 lat
  • Ostatnio:7 dni
  • Postów:455
0

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

P5
A ja bym radził zapoznać się z takimi pojęciami jak ogólniki, przydatnosc, strata czasu. Nic nie wniosłeś do dyskusji. Nawet jak bym wkul na blachę prosto z podręcznika polimorfizm i kompozycje to nie znaczy że bym wiedział co z nimi zrobić w tej sytuacji, bo tu dochodzimy do wzorców projektowych właśnie....tylko o który chodzi? A jak bym już znał wszystkie wzorce projektowe, to wyobraź sobie że pewnie bym tu tego pytania nie zadał. Więc, jeżeli mogę Cię prosić, idź trolowac gdzieś indziej. Z góry, szczerze, naprawdę bardzo, bardzo dziękuję.
Kliknij, aby dodać treść...

Pomoc 1.18.8

Typografia

Edytor obsługuje składnie Markdown, w której pojedynczy akcent *kursywa* oraz _kursywa_ to pochylenie. Z kolei podwójny akcent **pogrubienie** oraz __pogrubienie__ to pogrubienie. Dodanie znaczników ~~strike~~ to przekreślenie.

Możesz dodać formatowanie komendami , , oraz .

Ponieważ dekoracja podkreślenia jest przeznaczona na linki, markdown nie zawiera specjalnej składni dla podkreślenia. Dlatego by dodać podkreślenie, użyj <u>underline</u>.

Komendy formatujące reagują na skróty klawiszowe: Ctrl+B, Ctrl+I, Ctrl+U oraz Ctrl+S.

Linki

By dodać link w edytorze użyj komendy lub użyj składni [title](link). URL umieszczony w linku lub nawet URL umieszczony bezpośrednio w tekście będzie aktywny i klikalny.

Jeżeli chcesz, możesz samodzielnie dodać link: <a href="link">title</a>.

Wewnętrzne odnośniki

Możesz umieścić odnośnik do wewnętrznej podstrony, używając następującej składni: [[Delphi/Kompendium]] lub [[Delphi/Kompendium|kliknij, aby przejść do kompendium]]. Odnośniki mogą prowadzić do Forum 4programmers.net lub np. do Kompendium.

Wspomnienia użytkowników

By wspomnieć użytkownika forum, wpisz w formularzu znak @. Zobaczysz okienko samouzupełniające nazwy użytkowników. Samouzupełnienie dobierze odpowiedni format wspomnienia, zależnie od tego czy w nazwie użytkownika znajduje się spacja.

Znaczniki HTML

Dozwolone jest używanie niektórych znaczników HTML: <a>, <b>, <i>, <kbd>, <del>, <strong>, <dfn>, <pre>, <blockquote>, <hr/>, <sub>, <sup> oraz <img/>.

Skróty klawiszowe

Dodaj kombinację klawiszy komendą notacji klawiszy lub skrótem klawiszowym Alt+K.

Reprezentuj kombinacje klawiszowe używając taga <kbd>. Oddziel od siebie klawisze znakiem plus, np <kbd>Alt+Tab</kbd>.

Indeks górny oraz dolny

Przykład: wpisując H<sub>2</sub>O i m<sup>2</sup> otrzymasz: H2O i m2.

Składnia Tex

By precyzyjnie wyrazić działanie matematyczne, użyj składni Tex.

<tex>arcctg(x) = argtan(\frac{1}{x}) = arcsin(\frac{1}{\sqrt{1+x^2}})</tex>

Kod źródłowy

Krótkie fragmenty kodu

Wszelkie jednolinijkowe instrukcje języka programowania powinny być zawarte pomiędzy obróconymi apostrofami: `kod instrukcji` lub ``console.log(`string`);``.

Kod wielolinijkowy

Dodaj fragment kodu komendą . Fragmenty kodu zajmujące całą lub więcej linijek powinny być umieszczone w wielolinijkowym fragmencie kodu. Znaczniki ``` lub ~~~ umożliwiają kolorowanie różnych języków programowania. Możemy nadać nazwę języka programowania używając auto-uzupełnienia, kod został pokolorowany używając konkretnych ustawień kolorowania składni:

```javascript
document.write('Hello World');
```

Możesz zaznaczyć również już wklejony kod w edytorze, i użyć komendy  by zamienić go w kod. Użyj kombinacji Ctrl+`, by dodać fragment kodu bez oznaczników języka.

Tabelki

Dodaj przykładową tabelkę używając komendy . Przykładowa tabelka składa się z dwóch kolumn, nagłówka i jednego wiersza.

Wygeneruj tabelkę na podstawie szablonu. Oddziel komórki separatorem ; lub |, a następnie zaznacz szablonu.

nazwisko;dziedzina;odkrycie
Pitagoras;mathematics;Pythagorean Theorem
Albert Einstein;physics;General Relativity
Marie Curie, Pierre Curie;chemistry;Radium, Polonium

Użyj komendy by zamienić zaznaczony szablon na tabelkę Markdown.

Lista uporządkowana i nieuporządkowana

Możliwe jest tworzenie listy numerowanych oraz wypunktowanych. Wystarczy, że pierwszym znakiem linii będzie * lub - dla listy nieuporządkowanej oraz 1. dla listy uporządkowanej.

Użyj komendy by dodać listę uporządkowaną.

1. Lista numerowana
2. Lista numerowana

Użyj komendy by dodać listę nieuporządkowaną.

* Lista wypunktowana
* Lista wypunktowana
** Lista wypunktowana (drugi poziom)

Składnia Markdown

Edytor obsługuje składnię Markdown, która składa się ze znaków specjalnych. Dostępne komendy, jak formatowanie , dodanie tabelki lub fragmentu kodu są w pewnym sensie świadome otaczającej jej składni, i postarają się unikać uszkodzenia jej.

Dla przykładu, używając tylko dostępnych komend, nie możemy dodać formatowania pogrubienia do kodu wielolinijkowego, albo dodać listy do tabelki - mogłoby to doprowadzić do uszkodzenia składni.

W pewnych odosobnionych przypadkach brak nowej linii przed elementami markdown również mógłby uszkodzić składnie, dlatego edytor dodaje brakujące nowe linie. Dla przykładu, dodanie formatowania pochylenia zaraz po tabelce, mogłoby zostać błędne zinterpretowane, więc edytor doda oddzielającą nową linię pomiędzy tabelką, a pochyleniem.

Skróty klawiszowe

Skróty formatujące, kiedy w edytorze znajduje się pojedynczy kursor, wstawiają sformatowany tekst przykładowy. Jeśli w edytorze znajduje się zaznaczenie (słowo, linijka, paragraf), wtedy zaznaczenie zostaje sformatowane.

  • Ctrl+B - dodaj pogrubienie lub pogrub zaznaczenie
  • Ctrl+I - dodaj pochylenie lub pochyl zaznaczenie
  • Ctrl+U - dodaj podkreślenie lub podkreśl zaznaczenie
  • Ctrl+S - dodaj przekreślenie lub przekreśl zaznaczenie

Notacja Klawiszy

  • Alt+K - dodaj notację klawiszy

Fragment kodu bez oznacznika

  • Alt+C - dodaj pusty fragment kodu

Skróty operujące na kodzie i linijkach:

  • Alt+L - zaznaczenie całej linii
  • Alt+, Alt+ - przeniesienie linijki w której znajduje się kursor w górę/dół.
  • Tab/⌘+] - dodaj wcięcie (wcięcie w prawo)
  • Shit+Tab/⌘+[ - usunięcie wcięcia (wycięcie w lewo)

Dodawanie postów:

  • Ctrl+Enter - dodaj post
  • ⌘+Enter - dodaj post (MacOS)