Struktura web aplikacji

Struktura web aplikacji
Maciek G
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Warszawa
  • Postów:14
0

Cześć!

Aktualnie piszę projekt sam dla siebie żeby poćwiczyć JPA, Springa. Nie jestem pewien czy idę w dobrym kierunku. W tym momencie piszę backend który potem chcę spiąć z React. Czy moja struktura projektu jest poprawna? UserEntiy konwertuję na zwykłego Usera żeby łatwiej było zarządzać danymi.

screenshot-20211209201741.png

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1874
5

Jeżeli masz encje w infrastrukturze, to coś jest niehalo. Poza tym nie ma czegoś taka jak „poprawna struktura” - wszystko zależy co chcesz osiągnąć. No dobra - wrzucenie wszystkiego do głównego pakietu byłoby na pewno słabe :)


”Engineering is easy. People are hard.” Bill Coughran
edytowany 1x, ostatnio: Charles_Ray
SO
A u niego, te encje w infrastrukturze to nie są czysto bazodanowe encje? Domenowe ma chyba w domain. W infrze ma UserEntity, a w domain User.
Maciek G
Dokładnie te encje są czysto bazodanowe.
Maciek G
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Warszawa
  • Postów:14
0

@Charles_Ray: Chcę oddzielić encje. Po pobraniu z bazy przekształcać je w zwykłe obiekty i nimi manipulowac nastepnie obiekty znow przekształcać w encje.

HA
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1006
2

Bez jakichś bardziej rozbudowanych informacji trudno oceniać strukturę tak jak już napisał @Charles_Ray . Napisz w jakim kierunku planujesz iść z architekturą, jaką wielkość aplikacji planujesz, na jaką strategie mapowania się zdecydowałeś, czy zastanawiałeś się czy w Twojej aplikacji dane mapowanie ma faktycznie sens czy będziesz tylko przerzucał DTO w prawo i lewo etc. Na razie to tylko widać strukturę plików, która ma w sumie znaczenie estetyczne.

LukeJL
  • Rejestracja:około 11 lat
  • Ostatnio:8 minut
  • Postów:8408
1

Czy moja struktura projektu

Struktura plików to nie "struktura projektu", tylko co najwyżej jej mały wycinek, wierzchołek góry lodowej. Przecież nie wiadomo, co jest w środku tych plików.


Maciek G
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Lokalizacja:Warszawa
  • Postów:14
0

@hadwao:

  1. Chciałbym zrobić DDD. (nie wiem czy w ogóle w dobrym kierunku idę)
  2. Aplikacja miałaby Użytkowników (użytkownicy mieliby swój profil podobnie jak na LI) którzy składają swoją kandydaturę do ofert pracy które są publikowane przez adminów.
  3. Mapuję te informacje które będą na frontendzie. Wyciągam z bazy danych następnie @Entity mapuję na zwykły obiekt, dopiero wtedy modyfikuję, znów mapuję do @Entity i zapisuję do bazy.
SA
  • Rejestracja:ponad 3 lata
  • Ostatnio:ponad 2 lata
  • Postów:94
2

Duża ilość pakietów wcale nie pomaga w lepszej organizacji kodu aplikacji a nawet przeszkadza, bo klasy, które powinny być de facto w jednym pakiecie, bo należą do tego samego kontekstu , są rozsiane po jakiś oddzielnych małych i często zagnieżdżonych pakietach, przez które trzeba się ciągle przeklikiwać. Druga sprawa to łamanie enkapsulacji, bo jak masz mnóstwo małych pakietów ze źle określonym kontekstem, które ze sobą rozmawiają, to siłą rzeczy praktycznie każda klasa musi być publiczna zmiast package private i wystawiać tylko jakieś publicze api.Dlatego warto się zastanowić czy naprawdę jest potrzebny kolejny pakiet i wystrzgać się pakietozy, która trawi pewnie nie jedną apkę.
Polecam ci w tym temacie prezentację Jakuba Nabrdalika:

Charles_Ray
  • Rejestracja:około 17 lat
  • Ostatnio:około 3 godziny
  • Postów:1874
3

Nie kupuje takiego rozdzielnia encji w sensie pakietów. Sens podziału aplikacji na moduły/ficzery jest m. in. taki, żeby mieć wszystkie powiązane rzeczy blisko siebie unikając śmietnika (big ball of mud). Jaki jest zatem sens mieć Usera i UserEntity 10 pakietów dalej? Takie szczypanie się nic nie wnosi, a tylko wprowadza niepotrzebna komplikację. Potem się wszyscy śmieją, że „ooo DDD jest dla purystów i nic nie daje”. To powinno być wszystko w jednym module „uaa” (user authentication & authorization), „user”, „auth”, czy jak chcesz to zgrabnie nazwać.


”Engineering is easy. People are hard.” Bill Coughran
edytowany 6x, ostatnio: Charles_Ray
marian pazdzioch
  • Rejestracja:ponad 6 lat
  • Ostatnio:30 minut
  • Postów:720
4

struktura jest jak dziura w d..., każdy ma swoją

ja bardzo nie lubię kodu podzielonego na moduły per warstwa architektury

o wiele lepiej mi gdzy kod podzielony per funkcja (use case) i tam dopiero dzielisz per warstwa

Shalom
  • Rejestracja:około 21 lat
  • Ostatnio:prawie 3 lata
  • Lokalizacja:Space: the final frontier
  • Postów:26433
1

https://github.com/Pharisaeus/almost-s3 nie mówie że to najlepsza struktura, ale sprawdza się całkiem dobrze ;)


"Nie brookliński most, ale przemienić w jasny, nowy dzień najsmutniejszą noc - to jest dopiero coś!"
HA
  • Rejestracja:około 6 lat
  • Ostatnio:około 9 godzin
  • Postów:1006
1

@Maciek G: zajrzyj do tej książki https://reflectoring.io/book/ - można ją kupić po taniości, a jest bardzo fajną pozycją. Nie jest stricte o DDD, ale hexy zazwyczaj są używane w DDD, więc znajdziesz wiele odpowiedzi na swoje pytania + kilka pytań, na które jeszcze sobie nie odpowiedziałeś. Książka jest krótki i prosto napisana, więc w 1-2 dni można ją przeczytać ze zrozumieniem.

Co do struktury proponowanej przez autora tej książki, to wygląda ona tak (wersja dla proty/adaptery, czyli coś co często stosuje się w DDD): https://imgur.com/AdWtchg

Nawet jeśli nie idziesz w kierunku porty/adaptery to nadal myślę, że na podobnej strukturze możesz bazować jako punkt wyjścia. Masz jednak o wiele ważniejsze decyzje do podjęcia niż struktura plików. Co jeszcze mi się rzuca w oczy to, że idziesz w kierunku DDD, a nie masz na przykład ani śladu ValueObjectów, a to dla mnie taka chyba integralna część DDD (wiem, wiem - można się z tym kłócić).

Pytanie też o duplikowanie obiektów typu User i UserEntity - nie da się tego w Javie ogarnać jakimś ORM wspierającym Data Mapper Pattern? Pytam, bo nie znam Javy, a trochę tak to wygląda jakby UserEntity było ActiveRecordem i potem byś to mapował na obiekty biznesowe.

edytowany 1x, ostatnio: hadwao
KA
Fajna ta struktura pakietow zaprezentowana w ksiazce, choc cos mi mowi ze ludzie wola cos prostszego/bardziej pragmatycznego. Ja robie package by layer gdzie layer to warstwy z layered architecture (https://ajlopez.wordpress.com/2008/09/12/layered-architecture-in-domain-driven-design/): user interface, application, domain, infrastructure. Zamiast user interface mozna uzyc innej nazwy pakietu: controller, view, web, entrypoint, whatever. Package by feature nie potrzebuje, bo 1 microservice - 1 feature. Dla hardcorow zostaje https://www.youtube.com/watch?v=grJC6RFiB58
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)