Czytałem i bawiłem się programowaniem funkcjonalnym (FP) i bardzo lubię jego koncepcje, ale nie jestem pewien, jak zastosować je w przypadku większości moich aplikacji.Jak korzystać z programowania funkcjonalnego przy projektowaniu aplikacji
Będę bardziej szczegółowy, porozmawiajmy o aplikacjach na iOS. Widzę, jak wykorzystać niektóre z koncepcji, takie jak niezmienne struktury danych i funkcje wyższego rzędu, ale nie jak pracować z tylko/głównie czystymi funkcjami - unikając efektów ubocznych - które wydają się być główną częścią FP.
Czuję, że większość aplikacji dotyczy koordynacji wywołań wejściowych, wyświetlania danych, zapisywania danych, wysyłania żądań sieciowych, nawigacji między ekranami, animacji.
Wszyscy byłoby funkcje nieczyste na FP:
- koordynująca wejściowe: kranu przycisku, powiadomienie, push gniazdo serwera, dla tych wszystkich, muszę zdecydować, co nazywamy, gdzie je obserwować, itp.
- Wyświetlanie danych: odczyt z lokalnej bazy danych lub z serwera (efekt uboczny).
- Zapisywanie danych: tak samo jak powyżej (ale pisanie).
- Tworzenie żądań sieciowych: oczywiste, więc podam tylko przykład - pobieranie listy obrazów z Instagrama.
- Nawigacja: to zasadniczo przedstawienie kontrolerów widoku, które są efektem ubocznym.
- Animacje: zmiana czegoś na ekranie, efekt uboczny.
Istnieje bardzo niewiele miejsc, w których mam do przetwarzania danych, a te składają się prawie zawsze z pobierania niektórych Struct z bazy danych i łączenie się z wieloma informacjami na inny Struct, który będzie używany przez View Controller (to jak 5 linie ... zakładając, że potrzebujesz 5 właściwości do wyświetlenia w widoku). Oczywiście, może być konieczne wykonanie przetwarzania, takiego jak konwersja money: Int = 20 to moneyString: String = "US$\(money).00"
, ale to wszystko.
Czuję, że nie wdrażam DF w moim cyklu rozwoju aplikacji. Czy ktoś może wyjaśnić, w jaki sposób mogę to osiągnąć? Może z przykładami.
Dziękuję.
EDIT: teraz, po Clean Architecture pomysł, mam coś takiego jak mój architektury:
Wejścia mogą pochodzić z View
, jak kliknięcie przycisku, idą do ViewController
, który decyduje, który Interactor
zadzwonić. Ten Interactor
uzyska dostęp do niezbędnych Gateway
s, aby uzyskać pewne dane i przekształcić je w reprezentatywne dane, które zostaną przekazane do Presenter
(w formie delegata). Wreszcie Presenter
zaktualizuje View
, aby wyświetlić nowe dane.
Dodatkowo dane wejściowe mogą pochodzić ze źródeł External
, takich jak serwer z informacją, że niektóre dane zostały zaktualizowane i trzeba odświeżyć numer View
. To trafia do Interactor
(w postaci obserwatora), który będzie podążał za resztą łańcucha, tak jak w poprzednim przykładzie.
Jedyną częścią FP jest przekształcenie danych Gateway
w prezentowalne dane.Cała reszta ma efekty uboczne. Czuję, że robię coś złego i być może część tego kodu powinna być zorganizowana inaczej, aby więcej kodu mogło zostać przeniesione do czystych funkcji.
@Sami Kuhmonen Zaktualizowałem moje pytanie, aby było bardziej szczegółowe. –
@ Paulw11 Zaktualizowałem moje pytanie, aby było bardziej szczegółowe. –
@dfri Zaktualizowałem moje pytanie, aby było bardziej szczegółowe. –