O odpowiedzialności komponentów

0

Hej, mam pewien problem w aktualnym drobnym projekcie i nie do końca wiem jak to (hehe) zaprojektować

Otóż pisze sobie rodzaj parsera, który z bloga pobiera wpisy i wyciąga odpowiednie dane do końcowego modelu, który następnie prezentowany jest w formie tabelki - przyjmijmy że jest to blog kulinarny, a wyciągać chcę nazwę potrawy i składniki odżywcze

Napisałem sobie więc zestaw drobnych klas, które wyciągają poszczególne wartości lub nic jeżeli szukane regexy się we wpisie nie znajdują (mam więc np WęglowodanyParser, który wyciągnie liczbę dla węglowodanów w potrawie, NazwaParser, który wyciągnie string z nazwą itd)

Problem polega na tym, że część danych może znajdować się w komentarzach - zdarzało się, że autor np dopisach "a no tak, zapomniałem o zawartości białka - jest to X gram"

Kwestia implementacji jest tutaj drugorzędna, natomiast mam poważny problem z określeniem kto powinien być odpowiedzialny za "przeglądanie" komentarzy, jeśli któreś z pól okazało się niemożliwe do wyciągnięcia. Generalnie widzę takie opcje:

  • Parser konkretnej wartości - a więc parserze dostałeś cały wpis z komentarzami, spróbuj wyciągnąć wartość z wpisu, a jak ci wyszło null to spróbuj jeszcze z komentarzy. Dalej null? Trudno zwracamy! Udało się? Rewelacja!

  • Komponent odpalający parsery - a więc masz tu listę parserów, które oczekują jakiegoś stringa i wyplują gotowy model. Spróbuj wrzucić im treść wpisu - czy któreś z pól jest nullem? Spróbuj wrzucić im po kolei komentarze, a następnie zmerguj otrzymane modele w jeden (implementacja drugorzędna)

Jak to widzicie?

0

a) nie do końca jasne
b) granulacja parserów wydaje się za drobna, to są najzywżej wewnętrzne klasy (myśląc w duchu Javy / C#) w czymś większym.
c) wprowadzasz słowo "komponent" ... co chcesz dać do zrozumienia? Czy tylko przeteoretyzowanie tematu?

Nie da się dać ładnej architektury do czytania syfiastych danych. Albo rybki, albo akwarium,

1

Sensownie byłoby oddzielic parser od danych, niech on o nich nic nie wie; czyli osobny moduł dostarcza parserowi przygotowanego stringa.

1

Parser konkretnej wartości będzie to w duchu Kombinatorów parsera gdzie mając podstawowe parsery można je łączyć w coraz większe parsery aż ostatecznie dostajemy jeden parser będący w stanie sparsować cały interesujący nas tekst. I to wszystko bez żadnego zarządcy parserów nazywanego przez Ciebie komponentem. Nie wiem na ile technologia wybrana przez Ciebie na to pozwala, ale starałbym się żeby cała logika była możliwie nisko, bezpośrednio przy parsowanym tekście, a nie ciekła do jakiegoś zarządcy (komponentu), bo ten komponent ostatecznie zamieni się w Latającego Potwora Spaghetti

1 użytkowników online, w tym zalogowanych: 0, gości: 1