Moduł główny ma ważniejsze zadania. Kiedy będziesz chciał zrobić drugą wersję programu i zmodyfikować głupią graficzkę w Splash-u zgodnie z Twoim podejściem będziesz szukał tego w prawdopodobnie dużym module głównym.
Tak, jeśli z modułu głównego aplikacji zrobi się "spaghetti-code";
Kilka razy wykorzystywałem w swoich aplikacjach ekrany powitalne, które musiały wisieć do czasu ukończenia początkowych operacji (jak sprawdzanie istnienia najważniejszych plików, tworzenie brakujących mało ważnych plików, ładowanie grafiki itd.) i zawsze robiłem tak:
- formularz z ekranem powitalnym - wiadome - osobny moduł jedynie z formularzem;
- wszelkie operacje wykonywujące się podczas "wiszenia" ekranu powitalnego były elegancko opakowane w klasę, gdzie jej deklaracja i definicja była zaimplementowana także w osobnym module, dzięki czemu zyskiwałem na czytelności,
- całość sterowana z modułu głównego;
Dzięki temu moduł główny miał nie więcej, niż 200 LoC (z różnymi rzeczami prócz operacji początkowych) i wszystko było na swoim miejscu - kod elegancko rozdzielony; Więc nie ma mowy o błądzeniu w kodzie/modułach/wtf by cokolwiek znaleźć i poprawić, jak wynika z Twoich słów dotyczących "idei modułowości"; Oczywiście nie twierdzę, że Twój sposób jest jakiś dziwny/nielogiczny - po prostu dla mnie bardziej logiczne jest rozdzielenie tych dwóch warstw - formularza i klasy do przeprowadzania początkowych operacji; W module z formularzem obsługuje tylko i wyłącznie rzeczy związane z ekranem powitalnym (interfejsem), a ww. klasa ma swój moduł;
Wszystko oczywiście zależy od tego do czego służy ekran powitalny - czy tylko do pokazania jakiegoś loga (ogólnie grafiki i nic więcej), czy bardziej skomplikowany - do pokazania postępu rozruchu np. na ProgressBar
ze + etykiety z wczytywanymi plikami;
Jedno polecenie i splash mojego autorstwa jest dostępny gdziekolwiek byś nie chciał (nie tylko z projektu)
Tylko po co? Skoro jego przeznaczeniem jest wyświetlanie przy starcie aplikacji i nigdzie indziej; Poza tym jeśli nawet chciałbyś go tylko wyświetlić, to po co w niej Execute
, skoro i tak się go nie wykorzysta? No chyba, że znów chcesz wykonać Execute
to się zgodzę;
Spójrz raz jeszcze na budowę metody typu class o nazwie execute. [...] Jedynie co zostanie w pamięci to sama metoda execute (gdyż jest to metoda typu class).
Tak, spojrzałem i ujrzałem, że z wczorajszej analizy nic nie zrozumiałem... :]
Przeoczyłem, że jest to metoda statyczna (nazywajmy rzeczy po imieniu) - zwracam honor i przepraszam za wprowadzenie w błąd;
Spróbuj go przystosować, aby S.Screen przekazał jakąś informację (dowolną) do głównego modułu. Oczywiście jest to możliwe, ale wymaga większych zmian.
Tutaj się nie zgodzę - żadne zmiany, bo jak napisałem wyżej nie formularz steruje operacjami rozruchu, a klasa za to odpowiedzialna; Poza tym ta klasa współpracuje z silnikiem aplikacji, który jest odpowiedzialny za aktualizowanie interfejsu i innych elementów programu, przechowywanie bieżącej konfiguracji itd. przez cały czas działania aplikacji (silnik także jest osobną klasą niepowiązaną z żadnym formularzem, więc z każdego miejsca aplikacji mam do niego dostęp, a tworzony w pamięci jest w swoim osobnym module w sekcji initialization
i finalization
); Z resztą każdy formularz, jaki jest dynamicznie tworzony w mioch programach, w swoim konstruktorze pobiera odpowiednie informacje z silnika, a w destruktorze doń zapisuje, dzięki temu po raz kolejny wiadome jest wszystko - porządek jest - warstwy są oddzielone;
Podsumowując - lubię mieć kod poukładany, elementy służące do różnych rzeczy lubię mieć porozdzielane, stąd preferuję swoje rozwiązanie, które nigdy mnie nie zawiodło i jest na tyle elastyczne, że dużych przeróbek spowodowanych złym dzieleniem kodu nie miewam; Z racji tej, że ekran powitalny głównie wykorzystuję jedynie do informowania użytkownika o tym, iż aplikacja się obecnie uruchamia - nic więcej nie dodaję do formularza; Dzięki temu warstwy interfejsu i kodu działają niezależnie.
"I tak jak wspomniał @kAzek"
- przytoczyłem Twoje słowa;