Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [C++/Java]Przechowywanie parametrów aplikacji graficznej
MateuszS
post
Post #1





Grupa: Zarejestrowani
Postów: 1 429
Pomógł: 195
Dołączył: 6.10.2008
Skąd: Kraków/Tomaszów Lubelski

Ostrzeżenie: (0%)
-----


Witam, mamy taką często sytuację że w programie graficznym mamy coś takiego jak "Opcje", "Parametry" czy coś w tym stylu. Wpisujemy je np. w różnych inputach, textareach, radio buttonach a potem zapisujemy ustawienia. Dostęp do tych ustawień musi być z całego programu, z każdej klasy, która ich wymaga. Często jest tak że te klasy są gdzieś bardzo głęboko w hierarchii i nieodpowiednim jest pisanie czegoś takiego

Kod
//taki glupi przyklad
options = UI->getOptions();
UI->dom->parter->pokoj->krzeslo->setOptions(options)


Wiem że takie rozw. jak powyżej jest nieeleganckie i łamie zasady programowania obiektowego. Drugim rozwiązaniem może być przechowywanie tych ustawień w klasie statycznej i prosty dostęp za pomocą Opcje::parametr1. Jednak to mimo że wygodne, ponoć też jest niepoprawne (zalatuje zmiennymi globalnymi rodem z C).

Jaki jest wg Was najlepszy sposób na przechowywanie i przekazywanie tych danych? Lub ogólniej, jeżeli klasa "krzesło" (z powyższego przykładu) potrzebuje jakiejś danej z klasy "UI", to jak mu ją przekazać w najbardziej elegancki sposób?

Pozdrawiam

Ten post edytował MateuszS 22.11.2013, 19:27:45
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
lukasz1985
post
Post #2





Grupa: Zarejestrowani
Postów: 205
Pomógł: 43
Dołączył: 5.03.2012

Ostrzeżenie: (0%)
-----


W zmiennych globalnych nie ma nic złego. Naczytałeś się bzdur pseudo-profesjonalistów lub pracowników Google.
W programowaniu w takich językach jak Java / C# nie ma innych metod do tworzenia modułów jak użycie zmiennych statycznych / singletonów. Jedyną alternatywą jest odwrócenie zależności (Dependency Inversion/DI) co jest rozwiązaniem chorym umysłowo jeśli się temu bliżej przyjżeć.

To co ja bym zrobił to:
W C++ stworzył zmienne globalne "ustawienia" i "ui" i używał ich tam gdzie potrzeba.
W Javie stworzył klasy Ustawienia i UI i dał im pola "public static Ustawienia ustawienia" i "public static UI ui" przechowujące pojedyncze instancje tych klas, i w celu dostępu do nich używałbym importów statycznych .

Wewnątrz obiektów, które są elementami kompozycji danego modułu odwoływał bym się bezpośrednio do zmiennej globalnej / statycznej.

Nie ma czegoś takiego jak nieeleganckie rozwiązanie. Wszystko zależy od skali aplikacji, która musi być przewidziana na samym początku. Przede wszystkim przy aplikacjach stacjonarnych DI się nie sprawdza, chociaż może to być idealne rozwiązanie dla aplickaji internetowych.

Jeśli chcesz się jednak męczyć z DI/fabrykami, głupimi frameworkami DI typu Guice to droga wolna.

Jeszcze raz - zmienne globalne nie są złe, kiedy się wie, jak ich używać. Przede wszystkim w przestrzeni globalnej mogą leżeć typy wysoko abstrakcyjne, takie jak UI / ustawienia / menedżer zasobów czy obecny plik na którym pracujemy (jeśli zakładać że aplikacja pracuje na jednym pliku w czasie jej wykonywania), natomiast nie prymitywne typy int, float czy string.


Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 17.10.2025 - 03:10