-
Data: 2012-05-09 12:33:29
Temat: Re: what up, programowanie aspektowe
Od: " " <f...@g...SKASUJ-TO.pl> szukaj wiadomości tego autora
[ pokaż wszystkie nagłówki ]zażółcony <r...@c...pl> napisał(a):
> W dniu 2012-05-08 21:54, prof fir pisze:
> > zasadniczo pierwszy raz o tym slysze, spostrzezenie
> > w polskiej wiki wydaje sie sensowne, ale czy ktos tego
> > uzywal, czy da sie to jakos zrobic i jak to wyglada
>
> Elementy programowania/myślenia aspektowego pojawiają się
> wszędzie, ja akurat obserwuję to na przykładzie
> J2EE - tylko często się tego nie nazywa po imieniu
> i często jest to zapisane w sposób nieefektywny (bo za pomocą
> takiego języka jak Java). Wiele wzorców projektowych
> ma w sobie coś z idei programowania aspektowego.
>
> Jakiś prosty przykład ...
>
> Masz typową funkcję 'biznesową', która coś wyciąga
> z bazy danych, oblicza i do bazy zapisuje. Jak baza
> danych - to musi być jakieś łączenie z tą bazą a potem
> transakcja. Pominę samo łączenie, zostanę przy transakcji.
> Twoja funkcja wyglada wtedy tak:
>
> void MyFun() {
> BeginTrans()
> x=SELECT Z BAZY
> x = x * y * COSTAM
> UPDATE BAZY (x)
> CommitTrans()
> }
>
> W tej postaci funkcja ma jeszcze sporą 'niedoróbkę', a
> mianowicie - brak obsługi błędów. Dodajmy więc coś podstawowego:
>
> void MyFun() {
> BeginTrans()
> try {
> x=SELECT Z BAZY
> x = x * y * COSTAM
> UPDATE BAZY (x)
> CommitTrans()
> } catch (ex) {
> log.err(ex)
> RollbackTrans()
> }
> }
>
> Czy powyższy kod jest zły ? Dodać komentarze i będzie OK. Nie da się
> tego zrobić 'prościej'.
> (przy okazji będziesz miał odpowiedź na swoje pytanie w innym wątku,
> co to oznacza wprowadzić abstrakcję).
>
> A teraz sobie wyobraź, że masz 10 programistów i tysiące takich
> funkcji. Każdy z programistów robi copy paste tych beginów, endów,
> try-catchów, każdy coś tam zmieni (np. niektórzy OpenTrans() będę robić
> po try, a nie przed, jak w w.w. przykładzie.
> Generalnie - kod nie jest zbyt czytelny. Wynika to m.in. z tego, że
> w jednej funkcji łączy dwa aspekty: aspekt biznesowy i aspekt techniczny
> związany z zarządzaniem transakcjami.
> Na marginesie: Można troszeczkę ograniczyć ten techniczny aspekt
> wprowadzając obiekty do zarządzanai transakcjami (TransactionScope) i
> korzystając z wzorca RIAA, ale w jezyku takim jak Java akurat nic to nie
> da, bo obiekty nie mają destruktorów.
>
> Więc wydzielamy aspekt transakcyjności na zewnątrz.
> W bardzo dużym, przykładowym uproszczeniu, będziemy teraz mieć
> dwa współpracujące obiekty: manager transakcji oraz funkcję biznesową:
>
> class MyFunBiz {
> public execute() {
> x=SELECT Z BAZY
> x = x * y * COSTAM
> UPDATE BAZY (x)
> }
> }
>
> Powyżej zero kodu transakcyjnego, który jest teraz tu:
>
> class ManagerFunkcjiBiznesowych {
> public execute(MyFunBiz funBiz) {
> BeginTrans()
> try {
> funBiz.execute() <--- Tu wywołujesz kod biznesowy
> CommitTrans()
> } catch (ex) {
> log.err(ex)
> RollbackTrans()
> }
> }
> }
>
> Wywołanie naszej funkcji polega teraz na utworzeniu obiektu
> i przekazaniu go do managera funkcji/transakcji, który
> 'otacza' ją transakcją bazodanową.
>
> fun = MyFunBiz()
> ManagerFunkcjiBiznesowych.execute(fun)
>
> Programowanie aspektowe polega właśnie na takim 'otaczaniu',
> jak w cebuli. W środku masz zasadniczą funkcję biznesową
> i Twoich 10 programistów zajmuje się dostarczaniem tego
> środka (zobacz o ile jest to teraz czytelniejsze i zwięźlejsze),
> a potem sami lub automatycznie jest to 'otaczane'
> kolejnymi sukienkami - kolejnym aspektami/kontekstami (u nas jest
> jeden - kontekst transakcji bazodanowej).
> Programowanie aspektowe pozwala to robić w bardzo efektywnym
> zapisie, natomiast w języku takim jak Java trzeba tworzyć
> obiekty, interfejsy, klasy anonimowe, jest zamieszanie z przekazywaniem
> parametrów itp itd (co ja w przykładach w dużej części pominąłem).
>
> Masz też powyżej przykład utworzenia abstrakcji - abstrakcją jest
> tu np. pojęcie funkcji biznesowej, w której zajmujemy się wyłącznie
> biznesem, a transakcje mamy już zapewnione 'z zewnątrz.
dosyc ciekawe, (a jakos nigdy nie slyszalem nic ntt),
nawet ten kod w miare, tx za odp
z tym ze nie rozumiem tego kawalka
> public execute() {
/**/
}
to chyba skrot, czy tez jakies jezyk umozliwia takie opakowywanie
/ przekazywanie blokow kodu do srodka funkcji :-?
--
Wysłano z serwisu Usenet w portalu Gazeta.pl -> http://www.gazeta.pl/usenet/
Następne wpisy z tego wątku
- 09.05.12 12:39
- 09.05.12 13:09 Edek Pienkowski
- 09.05.12 14:03 zażółcony
- 09.05.12 15:48
- 09.05.12 15:51
- 09.05.12 15:57
- 09.05.12 16:06 zażółcony
- 09.05.12 16:13 zażółcony
- 09.05.12 21:59 Karol Y
- 10.05.12 02:21 Andrzej Jarzabek
Najnowsze wątki z tej grupy
- 7. Raport Totaliztyczny: Sprawa Qt Group wer. 424
- TCL - problem z escape ostatniego \ w nawiasach {}
- Nauka i Praca Programisty C++ w III Rzeczy (pospolitej)
- testy-wyd-sort - Podsumowanie
- Tworzenie Programów Nieuprzywilejowanych Opartych Na Wtyczkach
- Do czego nadaje się QDockWidget z bibl. Qt?
- Bibl. Qt jest sztucznie ograniczona - jest nieprzydatna do celów komercyjnych
- Co sciaga kretynow
- AEiC 2024 - Ada-Europe conference - Deadlines Approaching
- Jakie są dobre zasady programowania programów opartych na wtyczkach?
- sprawdzanie słów kluczowych dot. zła
- Re: W czym sie teraz pisze programy??
- Re: (PDF) Surgical Pathology of Non-neoplastic Gastrointestinal Diseases by Lizhi Zhang
- CfC 28th Ada-Europe Int. Conf. Reliable Software Technologies
- Młodzi programiści i tajna policja
Najnowsze wątki
- 2024-12-17 Rodzaj przekładni planetarnej z
- 2024-12-17 Z instrukcji do kitu
- 2024-12-17 Re: W telefonie brak szufladki na drugą kartę SIM
- 2024-12-17 nie wyrzucaj starych opon
- 2024-12-17 znów elektryk:P
- 2024-12-17 "Ręczny" a przegląd.
- 2024-12-17 Warszawa => Senior Frontend Developer (React + React Native) <=
- 2024-12-17 Warszawa => Fullstack Developer <=
- 2024-12-17 Warszawa => Starszy Konsultant AWS <=
- 2024-12-17 Kraków => Full Stack .Net Engineer <=
- 2024-12-17 Kraków => Programista Full Stack (.Net Core) <=
- 2024-12-17 Kraków => Software .Net Developer <=
- 2024-12-17 Rozproszona Kontrola Konstytucyjności WYBORNE ;-)
- 2024-12-17 dotacja dla PiS
- 2024-12-17 wolny rynek