docs: allow direct Godot-to-Godot imports between features
This commit is contained in:
@@ -247,6 +247,27 @@ Loot -> Enemies.Application ŹLE
|
||||
Combat -> Enemies.Godot ŹLE
|
||||
```
|
||||
|
||||
### Wyjątek: `Godot` -> `Godot`
|
||||
|
||||
`Domain` i `Application` trzymają się reguły bez wyjątków - tam kontrakt broni czegoś realnego (można podmienić implementację, przetestować logikę bez silnika, nie ma przypadkowego sprzężenia).
|
||||
|
||||
`Godot` tego wsparcia nie potrzebuje - kontrolery są celowo "głupie" i nie są objęte testami automatycznymi, więc kontrakt istniałby tam wyłącznie po to, żeby ominąć ograniczenie edytora Godota (`[Export]` nie umie wskazywać na typ-interfejs). Dlatego `Godot` jednego feature'a może importować `Godot` innego feature'a bezpośrednio, najczęściej po to, żeby zawrzeć w scenie węzeł z innego feature'a (`[Export]` na konkretną klasę) i wywołać na nim kilka metod.
|
||||
|
||||
```text
|
||||
Players.Godot -> Interactions.Godot DOBRZE (kontener sceny, wywołanie metod kontrolera)
|
||||
Players.Application -> Interactions.Godot ŹLE (logika feature'a nadal tylko przez Contracts)
|
||||
Players.Domain -> Interactions.Godot ŹLE
|
||||
```
|
||||
|
||||
`GetNode`/`GetNodeOrNull` po ścieżce w scenie między feature'ami dalej jest niepożądane - zależność ma być jawna (typowane pole `[Export]` albo parametr metody `Initialize`/`Use...`), nie odnajdywana w drzewie sceny w runtime.
|
||||
|
||||
Ten wyjątek nie zwalnia z Prawa Demeter. Rozmawiamy tylko z bezpośrednim sąsiadem - jeśli feature trzyma w sobie kontroler innego feature'a, woła na nim metody sam, zamiast wystawiać go dalej do przechodzenia przez łańcuch (`node.Inner.Other.Method()`). Kod spoza feature'a nie powinien wiedzieć, że dany kontroler w ogóle zawiera w sobie coś z innego feature'a.
|
||||
|
||||
```text
|
||||
player.SetMovementMode(mode) DOBRZE (PlayerController sam woła w środku Interaction/Body)
|
||||
player.Interaction.SetActive(isActive) ŹLE (wywołujący łańcuje się przez Playera do Interaction)
|
||||
```
|
||||
|
||||
### Eventy między feature'ami
|
||||
|
||||
Gdy jedno zdarzenie interesuje wiele feature'ów, feature źródłowy publikuje event i nie wie, kto go słucha:
|
||||
|
||||
Reference in New Issue
Block a user