Myślę, że ważne jest, aby rozwinąć nieco dalej to debugowanie „odwrotne” lub „historyczne”. Myślę, że zrozumienie złożonych systemów i zachowań w nich, odtworzenie „zdarzeń”, które wyraźnie określają stan, jest absolutnie kluczowe.
Chcę wyrazić to, że nie jesteście sami, zastanawiając się, dlaczego ta technika nie jest dziś tak często stosowana lub dlaczego powiązane problemy rzadko są jasno omawiane.
Podkreślmy tutaj dwie bardzo ważne koncepcje:
1. Aby zrozumieć system programowania, pomocne jest określenie stanu
2. Aby jeszcze bardziej zrozumieć system programowania, odtwarzanie sekwencji stanu (zdarzeń) może bardzo pomóc.
Oto niektóre źródła, które rozwiązały problem i zaproponowały lub zaprojektowały rozwiązania problemu (radzenie sobie ze stanem w złożonych systemach):
- Poza bitem smoły, papier: http://shaffner.us/cs/papers/tarpit.pdf
Główne pomysły: unikaj, izoluj lub wyraźnie określ stan
-CQRS
http://www.cqrs.nu/
Jest to połączenie dwóch pojęć: Segregacja zapytań poleceń i Pozyskiwanie zdarzeń. Istnieją różne implementacje (Java, C #, Scala). Odgrywanie sekwencji Tate'a i ewolucja modelu domeny są tutaj kluczowymi częściami.
Jeśli naprawdę pomniejszysz i zobaczysz bardzo szeroki obraz, zobaczysz już, że wraz ze „wzrostem” programowania funkcjonalnego ludzie są już ((nie) świadomie) przyciągani do fp, ponieważ to wyraźnie określa stan! Ale dotyczy to tylko punktu pierwszego, aby zająć się drugim, potrzebujesz innej koncepcji, którą można by „luźno” opisać jako funkcjonalne programowanie reaktywne.
Więc możesz powiedzieć wszystko dobrze i dobrze, ale kto faktycznie używa CQRS i FRP? Powiedziałbym (IMO, ponieważ nie mam konkretnych liczb), w rzeczywistości wiele firm po prostu nie wie, że praca, którą wykonują ma taką terminologię. Być może przeszukujesz trochę Google i słyszysz od firm korzystających z CQRS, istnieją już pewne historie sukcesu. Także FRP rośnie powoli jako przykład, który mogę podać Netflixowi: http://techblog.netflix.com/2013/02/rxjava-netflix-api.html
Który właśnie wydał implementację RX, która jest oparta na .NET (ale ma implementacja Javascript). Dlatego ludzie już dziś używają tych technik, W DUŻYM, aby zrozumieć złożone systemy i uczynić je jeszcze lepszymi. Dlatego używają technik odwrotnego debugowania.