Istnieje polskie okreslenie odzwierciedlenia (Thinking in Java). Nowoczesne javowe frameworki korzystaja z tego b. czesto obok runtime code generation i annotations.
Faktycznie bardzo dziwnie to napisane. Zaryzykowalbym nawet stwierdzenie, ze kompletna bzdura albo wyrwane z kontekstu.
Strutsa juz prawie nie pamietam (kazdy go zreszta juz powinien zapomniec dla wlasnego dobra
), ale
Kazdy request zwiazany jest z jakas akcja. W Rails jest to metoda kontrolera a w przypadku Strutsa jest to oddzielna klasa, kt. dziedziczy z org.apache.struts.action.Action i przeciaza (ugh
wole nadpisuje) metode execute(),
execute() przetwarza request i zwraca obiekt ActionForward, kt. zazwyczaj jest JSP (rails: rhtml template) ale tez moze przekierowywac do innej akcji (rails: redirect_to).
A teraz sie cofniemy. Url w rails wyglada przykladowo http://localhost/recipe/create (czyli kontrolerem jest RecipeController i posiada met. create(), oczywiscie urlami sterujemy za pomoca routes.rb). Rails zidentyfikuje klase kontrolera (przy pomocy regul w routes.rb i konwencji nazewniczych), stworzy jego instancje i korzystajac z odzwierciedlen sprawdzi czy jest dana metoda (akcja) i ewentualnie ja wywola. W uproszczeniu:
class MessageController
def show(msg)
puts msg
end
end
# to wlasnie reflection - jedna linijka kodu w porownaniu z java!
eval("MessageController").new.send(:show, ["Ruby on Rails"])
W Strutsie XML a dokladniej wiaza url z odpowiednia subklasa Action. (hmm… zdaje sie, ze w Strutsie jest tylko jeden kontroler - ActionServlet?). Przykladowo:
<action-mappings>
<action path="/createRecipe"
type="org.tralala.controllers.CreateRecipeAction"
name="createRecipe"
scope="request">
<forward name="success" path="/showRecipe"/>
</action>
<action path="/showRecipe" itd...
Czy gdzies po drodze Struts tez korzysta z reflection to nie wiem. W zrodla nie patrzylem, ale wydaje mi sie, ze tak. Chodzi raczej nie tyle o reflection co przyjete w Rails konwencje nazewnicze, kt. pozwalaja na unikniecie kilometrowych plikow konfiguracyjnych (xml czy yaml).
Jezeli tu jakas bzdure palnalem to prosze o korekte.