Hey Alexander, thanks for your kind remarks :)
I'd be curious to learn how you handle dependencies of aspects. Do you allow some kind of dependency injection for them? Cheers, Johannes On Mon, Dec 3, 2012 at 2:10 PM, Alexander Lissachenko < lisachenko...@gmail.com> wrote: > Dear Victor > > I'll try to answer to each question. My English is not good enough, so > there will be mistakes, please ignore them if possible )) > > 1. Your shouldn't use AOP for any __APPLICATION__ logic. AOP should be > used only for simplifying the source code of your services by extracting > logging, caching, authorization, transaction, etc into specific classes - > aspects. Main idea here is DRY - do not repeat source code for > logging/caching something in each method of the class. > > 1.1 It's not too complex. > > It's like OOP with objects, classes, encapsulation, polymorphism, etc. > Of course, it will take a little of time to read about terminology, play > with AOP, but after that every coder will easily understand you. > > 1.2 Yes, AOP contains some magic to perform weaving, but this is power of > aspects: you can easily add/remove aspects and everything should work. > > I'm not want to use PHP extensions for bytecode modification, because it > can give unpredictable results or even segfaults. Of course, sysadmins > doesn't like any strange extensions on production servers. Go! library is > fully PHP native, so it can work everywhere. > And yes, DI is much more magic component ) Event dispatchers, signal > slots, dynamic proxies they are magic. But when magic has a predictable > result, it becomes standard ) > > 1.3 Debugging. > > Debugging an aspects with Go! AOP or with AOP-PHP is straightforward: just > put a breakpoints in aspect classes or in object classes. And just refresh > a page with enabled XDebug. > TYPO3 Flow AOP replaces original files with proxies therefore there will > be need to put breakpoints in cache files. Not so good. > > 1.4 Performance > > Performance of PHP-AOP is the best because it's an extension, but no > warranty that this extension is stable enough. > Go! has good performance for method invocations like CG (JmsAOPBundle) and > even more faster ) It doesn't use slow technologies during method > invocation. I have a solution that will allow to cache proxies in another > directory and will preserve an ability to debug source code, not the cache. > > 2 AOP. Past? Present? Future! > > I think, that symfony2 takes a lot of ideas from Java, especially from > Spring framework. IoC, DI, definition for services in XML - they all were > ported to PHP by Fabien. However, Spring has also an AOP and it's a great > technology, that can be ported to PHP too. > So, Go! is a __LIBRARY__ that can be used everywhere, like DIC Component. > Just add one line to composer, install it and you are ready to use > aspects.There isn't any requirements for PHP extensions, frameworks, > technologies that you use. It's main key of aspects, they should be simple > as possible and shouldn't require anything specific from application source > code to work. > > 2.1 > Thanks for compliment, I am 27 years old )). And my title is Senior Web > Architect at Alpari ) Two days ago I were at Kiev, Ukraine at > SymfonyCampUA-2012 and presented this library to the Symfony Community. > Storm of applause and respects after presentation made me so happy )) > > Here is one photo with me: > https://plus.google.com/photos/102759111128192312564/albums/5817101515573489169/5817102228448987362 > Slides (Russian) are here: > http://www.slideshare.net/lisachenko/php-go-aop(Pictures can give you the > overview what Go! can do) > > If you have more specific questions about AOP or want to discuss something > feel free to ask me, i'll be glad to talk about AOP and improve my English > too )) > > суббота, 1 декабря 2012 г., 4:30:26 UTC+4 пользователь Victor Berchet > написал: > >> Dear Alexander: >> >> Ah AOP, you should learn that the Symfony community is a big and >> beautiful family but only our beloved father, Fabien is allowed to >> introduce new concepts. >> >> Don't worry I am kind of joking but nonetheless I think that AOP has >> quite a bad reputation in the community, see [1][2] and the previous >> messages in this topic even if they are older. >> >> So I would like to take the opportunity to talk a little more about AOP. >> >> 1) Why I should not use AOP (common biases) >> >> 1.1) It's way too complex >> >> It's a 3-letter word. DI, the central concept of Sf2 is only a 2-letter, >> it must be complex ! >> And the extensive new terminology[3] is there to prove it. >> >> 1.2) It is a way way way too magical paradigm (def: to transform or >> produce by or as if by magic) >> >> Most developers are afraid of AOP because they think it's some kind of >> black magic. >> >> They probably do not know that Sf2 uses a lot of magic, let me quote a >> comment[4] for a recent discussion[1]: >> >> > did you ever wonder what happens when you run your 10 lines controller ? >> > >> > - autoload: generated code, >> > - bootstrap: processed code, >> > - DI usage: generated code, >> > - route matching: generated code, >> > - maybe some security: generated code, >> > - your 10 lines of genuine code, >> > - maybe some ORM: generated code, >> > - URL generation: generated code, >> > - probably some Twig rendering: generated code. >> > >> > But maybe none of this happens because you're using HttpCache... >> generated code ! >> >> I could add that by default in the Sf standard edition[5]: >> - Doctrine entities manager are all proxied[6], >> - The security extra bundle also generates proxies[7]. >> Yes a lot of devs are already using AOP without even knowing. >> >> To me $this->get('security.context')**[8] has more magic than AOP >> >> 1.3) It's hard to debug >> >> Try to debug "$this->get('security.context'**)" or >> "$dispatcher->dispatch()" that triggers a lazy-loaded service, >> it will be much more complex that debugging AOP which only add a very >> light proxies to your classes. >> >> 1.4) Performance >> >> The generated proxies are very light and the impact on performance is >> very small. >> And you should balance it with the improved maintainability of your code >> which is priceless. >> >> 2) so AOP ? >> >> 2.1) What AOP could do for you ? >> >> "A plugin should be able to add methods, or do something before or after >> a method is executed, without interfering with other plugins[...]" >> This is not a quote from the AOP article on wikipedia, but from the Event >> Dispatcher component documentation[9], the concepts are somehow similar. >> >> With AOP you can execute some code (Advice) after or before a function >> (at Join Points). "Pointcuts" are a way to express at what "Join points" >> the "advice" should be executed. >> This is a very incomplete definition, just to give you a taste of AOP and >> the willing to dig deeper. >> >> 2.1) Is it complex ? >> >> No, even a 14 years old boy[10] can understand it (sorry Alexander, an >> other of my bad jokes - or maybe a compliment actually - but you look damn >> young !). >> >> There is only a handful of concepts, you can try playing with it inside >> your SFSE, go read the docs[11] and start playing. >> >> 3) Any current implementation ? >> >> AOP has first been introduced in Java with AspectJ[12] in 2001. >> Qooxdoo (a great javascript UI library) also supports AOP[13]. >> >> Actually a lot of languages[14] supports AOP, it must not be that bad ! >> >> but what about PHP ? >> - Typo3 uses it since 2006[15], >> - There is a PHP extension[16] - unstable for now but some work >> ongoing[17], >> - Johannes has a bundle for Sf2[18], which is included in the SE, >> - Alexander has written Go[19]. >> >> Well, that's it for today. >> I hope some of you have learned a few things and will give AOP a try. >> Maybe we'll have an AOP component in Sf2 some day. >> If not, not a big deal, I had a great time writing this message anyway ! >> >> Victor >> >> [1] >> https://github.com/symfony/**symfony/issues/6139<https://github.com/symfony/symfony/issues/6139> >> [2] >> https://github.com/symfony/**symfony/pull/3296<https://github.com/symfony/symfony/pull/3296>in >> some extends >> [3] http://en.wikipedia.org/wiki/**Aspect-oriented_programming#** >> Terminology<http://en.wikipedia.org/wiki/Aspect-oriented_programming#Terminology> >> [4] https://github.com/symfony/**symfony/issues/6139#** >> issuecomment-10841221<https://github.com/symfony/symfony/issues/6139#issuecomment-10841221> >> [5] >> https://github.com/symfony/**symfony-standard<https://github.com/symfony/symfony-standard> >> [6] look at your <cache>/jms_diextra/doctrine/ >> [7] look at your <cache>/jms_diextra/proxies/ >> [8] https://picasaweb.google.com/**victor.berchet/Sf2?authkey=** >> Gv1sRgCM7A8tqJoc_zywE#**slideshow/5816753838641482210<https://picasaweb.google.com/victor.berchet/Sf2?authkey=Gv1sRgCM7A8tqJoc_zywE#slideshow/5816753838641482210> >> [9] http://symfony.com/doc/**current/components/event_** >> dispatcher/introduction.html<http://symfony.com/doc/current/components/event_dispatcher/introduction.html> >> [10] https://secure.gravatar.com/**avatar/** >> e7af3ef8e48a800cd2eedae073104c**1a?s=400&d=https://a248.e.** >> akamai.net/assets.github.com%**2Fimages%2Fgravatars%** >> 2Fgravatar-user-420.png<https://secure.gravatar.com/avatar/e7af3ef8e48a800cd2eedae073104c1a?s=400&d=https://a248.e.akamai.net/assets.github.com%2Fimages%2Fgravatars%2Fgravatar-user-420.png> >> [11] >> http://jmsyst.com/bundles/**JMSAopBundle#overview<http://jmsyst.com/bundles/JMSAopBundle#overview> >> [12] http://www.eclipse.org/**aspectj/ <http://www.eclipse.org/aspectj/> >> [13] >> http://demo.qooxdoo.org/**current/apiviewer/#qx.core.**Aspect<http://demo.qooxdoo.org/current/apiviewer/#qx.core.Aspect> >> [14] http://en.wikipedia.org/wiki/**Aspect-oriented_programming#** >> Implementations<http://en.wikipedia.org/wiki/Aspect-oriented_programming#Implementations> >> [15] >> https://twitter.com/**robertlemke/status/**274532529975984128<https://twitter.com/robertlemke/status/274532529975984128> >> [16] https://github.com/AOP-PHP/AOP >> [17] >> https://twitter.com/**julienPauli/status/**274180211132755968<https://twitter.com/julienPauli/status/274180211132755968> >> [18] >> https://github.com/schmittjoh/**JMSAopBundle<https://github.com/schmittjoh/JMSAopBundle> >> [19] >> https://github.com/lisachenko/**go-aop-php<https://github.com/lisachenko/go-aop-php> >> >> >> On Saturday, November 24, 2012 8:18:58 PM UTC+1, Alexander Lissachenko >> wrote: >>> >>> I have developed an Go! AOP library for PHP that can be used with any >>> PHP applications and frameworks. It written in plain PHP and doesn't >>> require any PHP extensions, doesn't use evals and expensive function calls, >>> doesn't require changes in the original source code. There is a good >>> support for debugging with XDebug, because auto-generated classes are clean >>> and simple. I'm planning to create a bundle for Symfony2 as alternative for >>> JMSAopBundle after SymfonyCampUA-2012 where I'll have a talk about this >>> library. >>> >>> Here is a link: >>> https://github.com/**lisachenko/go-aop-php<https://github.com/lisachenko/go-aop-php> >>> >>> четверг, 30 сентября 2010 г., 21:42:16 UTC+4 пользователь Yuen-Chi Lian >>> написал: >>>> >>>> Hi, >>>> >>>> I searched the entire group but couldn't find many discussions on AOP. >>>> >>>> The SF2 Security discussion (http://bit.ly/sf2sec) got me to wonder >>>> will AOP ever be part of SF2. If yes, are we going to write it all or we >>>> will use the state-of-art AOP solution in PHP (which is?)? >>>> >>>> -- > If you want to report a vulnerability issue on symfony, please send it to > security at symfony-project.com > > You received this message because you are subscribed to the Google > Groups "symfony developers" group. > To post to this group, send email to symfony-devs@googlegroups.com > To unsubscribe from this group, send email to > symfony-devs+unsubscr...@googlegroups.com > For more options, visit this group at > http://groups.google.com/group/symfony-devs?hl=en > -- If you want to report a vulnerability issue on symfony, please send it to security at symfony-project.com You received this message because you are subscribed to the Google Groups "symfony developers" group. To post to this group, send email to symfony-devs@googlegroups.com To unsubscribe from this group, send email to symfony-devs+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/symfony-devs?hl=en