<?xml version="1.0" encoding="UTF-8"?>
<feed xml:lang="en-US" xmlns="http://www.w3.org/2005/Atom">
  <title>andthennothing.net: Tag architecture</title>
  <subtitle type="html">&amp;ldquo;first there was a three-legged monkey...&amp;rdquo;</subtitle>
  <id>tag:andthennothing.net,2005:Typo</id>
  <generator uri="http://typo.leetsoft.com" version="4.0">Typo</generator>
  <link href="http://andthennothing.net/xml/atom10/tag/architecture/feed.xml" rel="self" type="application/xml+atom"/>
  <link href="http://andthennothing.net/tags/architecture?tag=architecture" rel="alternate" type="text/html"/>
  <updated>2007-03-04T20:20:26+00:00</updated>
  <entry>
    <author>
      <name>Jonas Bengtsson</name>
      <email>jonas.b@home.se</email>
    </author>
    <id>urn:uuid:87787b99-c881-4c28-9218-a020ba21d565</id>
    <published>2005-11-10T23:50:00+00:00</published>
    <updated>2007-03-04T20:20:26+00:00</updated>
    <title>Øredev</title>
    <link href="http://andthennothing.net/archives/2005/11/10/oredev" rel="alternate" type="text/html"/>
    <category term="oredev" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="conference" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="software" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="architecture" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="design" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="aop" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="dependencyinjection" scheme="http://andthennothing.net/tags/architecture"/>
    <content type="html">&lt;p&gt;I just returned from a two-day developers&amp;#8217; conference called &lt;a href="http://oredev.org/"&gt;&amp;Oslash;redev&lt;/a&gt; where I had a great time.&lt;/p&gt;


	&lt;p&gt;The keynote by &lt;a href="http://www.domainlanguage.com/about/ericevans.html"&gt;Eric Evans&lt;/a&gt; about &lt;a href="http://domaindrivendesign.org/"&gt;Domain-Driven Design&lt;/a&gt;, or &lt;span class="caps"&gt;DDD&lt;/span&gt; for the abbreviationists, was great! He&amp;#8217;s a great speaker and presented an interesting topic. I&amp;#8217;ve heard about &lt;span class="caps"&gt;DDD&lt;/span&gt; before, but I don&amp;#8217;t think I grokked it entirely back then. However, listening to the guy who &lt;a href="http://domaindrivendesign.org/book/"&gt;came up&lt;/a&gt; with the concept is often a sure way to understand what it&amp;#8217;s all about. I attended a longer workshop today as well which provided a deeper understanding. &lt;span class="caps"&gt;DDD&lt;/span&gt; is, to me, about creating and working with a model of the domain. The model is at the heart of the development and should reflect the domain as well as the software design. Another important aspect is the usage of a ubiquitous language, that the same language is used by the domain experts, the developers, and the code.&lt;/p&gt;


	&lt;blockquote&gt;
		&lt;p&gt;The critical complexity of most software projects is in understanding the business domain itself.&lt;br /&gt;
Does this technology help me focus on the domain?&lt;br /&gt;
&lt;em&gt;Does it distract me?&lt;/em&gt;&lt;/p&gt;
	&lt;/blockquote&gt;


	&lt;p&gt;&lt;a href="http://erik.doernenburg.com/"&gt;Erik D&amp;ouml;rnenburg&lt;/a&gt; talked about Dependency Injection and Inversion of Control and it was a good overview of the subject. And it&amp;#8217;s always refreshing to see an &lt;span class="caps"&gt;IDE&lt;/span&gt; during a presentation. Erik used the &lt;a href="http://www.springframework.com/"&gt;Spring&lt;/a&gt; framework, and since I attended Rod Johnson&amp;#8217;s presentation/workshop &lt;a href="http://andthennothing.net/archives/2005/06/04/expo-c"&gt;half a year ago&lt;/a&gt; I learned few new things, but it was interesting.&lt;/p&gt;


	&lt;p&gt;Peter Tallungs talked about a missing architect role. Where architecture in house building, and seemingly in the software industry in the beginning, is/was about user needs, requirements, and user interface it has become an engineering role in the software industry. Perhaps we need to have a role that more closely corresponds to an architect than the current &amp;#8220;software architect&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.jroller.com/page/rickard"&gt;Rickard &amp;Ouml;berg&lt;/a&gt;&amp;#8217;s talk about &lt;acronym title="Aspect Oriented Programming"&gt;AOP&lt;/acronym&gt; was the same as the one he gave at &lt;a href="http://andthennothing.net/archives/2005/06/04/expo-c"&gt;Expo-C&lt;/a&gt;. Fortuately, he&amp;#8217;s an entertaining and interesting to listen to so I didn&amp;#8217;t mind. One thing I think he stressed more this time was defining pointcuts using annotations, which seemed like &lt;em&gt;the&lt;/em&gt; way of defining pointcuts. I remember liking using annotations the most the last time, but I don&amp;#8217;t remember it presented as &lt;em&gt;the&lt;/em&gt; way.&lt;/p&gt;


	&lt;p&gt;The other workshop (in addition to the &lt;span class="caps"&gt;DDD&lt;/span&gt; workshop) I attended was the &lt;a href="http://www.xp.be/xpgame/"&gt;XP Game&lt;/a&gt;. It&amp;#8217;s a game I&amp;#8217;ve heard mentioned quite many times during the last years in various agile settings. It was a great fun and good way to get a taste of the planning process of XP.&lt;/p&gt;


	&lt;p&gt;All in all, it was a great conference, with great topics, speakers and organisation. Hopefully I&amp;#8217;m able to return next year (it&amp;#8217;s planned to be an annual event).&lt;/p&gt;</content>
  </entry>
  <entry>
    <author>
      <name>Jonas Bengtsson</name>
      <email>jonas.b@home.se</email>
    </author>
    <id>urn:uuid:7db2efeb-1c35-46ee-897b-14706129a960</id>
    <published>2005-06-04T16:51:00+00:00</published>
    <updated>2005-12-18T03:19:03+00:00</updated>
    <title>Expo-C</title>
    <link href="http://andthennothing.net/archives/2005/06/04/expo-c" rel="alternate" type="text/html"/>
    <category term="conference" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="software" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="architecture" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="aop" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="reuse" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="framework" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="webdevelopment" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="dependencyinjection" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="tdd" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="dynamiclanguages" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="dotnet" scheme="http://andthennothing.net/tags/architecture"/>
    <category term="java" scheme="http://andthennothing.net/tags/architecture"/>
    <content type="html">&lt;p&gt;This week I attended &lt;a href="http://www.expo-c.com/"&gt;Expo-C&lt;/a&gt;, &amp;#8220;a 3-day Software Architecture Conference&amp;#8221; of which I went on two days. Software architecture is a dangerous word since it might imply so many things, from &amp;#8220;oh so boring&amp;#8221; to &amp;#8220;a hoot&amp;#8221; on the interest scale. Fortunately, this conference managed to place itself closer to &amp;#8220;a hoot&amp;#8221; than to &amp;#8220;oh so boring&amp;#8221;.&lt;/p&gt;


	&lt;p&gt;&lt;a href="http://www.jroller.com/page/rickard"&gt;Rickard &amp;Ouml;berg&lt;/a&gt;&amp;#8217;s presentation of Aspect oriented programming, &lt;span class="caps"&gt;AOP&lt;/span&gt;, was truly interesting. I can only find &lt;a href="http://andthennothing.net/archives/2002/10/02/aspects"&gt;one reference to &lt;span class="caps"&gt;AOP&lt;/span&gt; back in 2002 on this blog&lt;/a&gt;, so I think it&amp;#8217;s safe to say that this was my basic opinion of &lt;span class="caps"&gt;AOP&lt;/span&gt; before the conference: nice ideas, but complex and will it work in larger projects? I have looked at &lt;span class="caps"&gt;AOP&lt;/span&gt; once in a while but never fully grokked it, and never used it for anything larger than testing that it works. And languages like Ruby and Python have made more impression on me.&lt;/p&gt;


	&lt;p&gt;Rickard&amp;#8217;s presentation opened up my eyes for that &lt;span class="caps"&gt;AOP&lt;/span&gt; is really interesting. But then again, anyone who put this quote on the fourth slide has my full attention: &amp;#8220;Inheritence sucks as a means of reuse&amp;#8221;. That is a statement I can wholeheartedly agree with. The standard &lt;span class="caps"&gt;AOP&lt;/span&gt; example, the trace example, is nice and that kind of &lt;span class="caps"&gt;AOP &lt;/span&gt;(advice in &lt;span class="caps"&gt;AOP&lt;/span&gt;-lingo) is probably very useful (transaction management, caching, security and so forth are other similar functionality). But introductions, that is methods and data introduced to an object or class, is what really got me thinking. Rickard&amp;#8217;s product, a slick &lt;span class="caps"&gt;CMS&lt;/span&gt; called &lt;a href="http://www.senselogic.se"&gt;SiteVision&lt;/a&gt;, used &lt;span class="caps"&gt;AOP &lt;/span&gt;(a home-brewn version) religiously, and it seemed to be a successful approach.&lt;/p&gt;


	&lt;p&gt;Another thing that Rickard stressed was tool support, and I do agree that tool support is crucial for the success of &lt;span class="caps"&gt;AOP&lt;/span&gt;. Back in 2002 &lt;a href="http://www.eclipse.org/ajdt/"&gt;AJDT&lt;/a&gt; was new, but now it seems to be a mature product, and it have some nice visualization features (I&amp;#8217;ve just tried to create a simple aspect so far, due to lack of time).&lt;/p&gt;


	&lt;p&gt;The other main attraction of the conference for me was &lt;a href="http://www.springframework.com/people/rod.html"&gt;Rod Johnson&lt;/a&gt; who had one presentation during Tuesday, and a full-day tutorial of &lt;a href="http://www.springframework.com/"&gt;Spring&lt;/a&gt; during Wednesday. Web development frameworks is something that has interested me for quite a while, for some peculiar reason. I have only done two web projects, an e-learning system in &lt;span class="caps"&gt;PHP&lt;/span&gt; and a community in Java, and those were done during my university studies. Nowadays, my main interest, which I share with many in the blogosphere (at least the parts I follow), is in &lt;a href="http://www.rubyonrails.org/"&gt;Ruby on Rails&lt;/a&gt;.&lt;/p&gt;


	&lt;p&gt;The conference was quite directed towards mainly Java/J2EE and somewhat towards .NET. I&amp;#8217;ve been out of the Javaverse for a while so it was due time to get reintroduced. &lt;span class="caps"&gt;J2EE&lt;/span&gt; seems quite overcomplex and painful so I understand where the need for lightweight frameworks, such as Spring, spring from (bad pun intended). There is a lot of great ideas in Spring and it put a lot of emphasis on testability, to be non-invasive and to promote good design. The main tool to achieve this is, from my viewpoint, IoC/DI.&lt;/p&gt;


	&lt;p&gt;Inversion of Control (IoC), or Hollywood Principle (&amp;#8220;Don&amp;#8217;t call us we&amp;#8217;ll call you&amp;#8221;), is a pattern to loosen the coupling in a system. Instead of objects creating all the objects it needs, setters and constructor arguments are used to give an object the objects it needs. And (don&amp;#8217;t know if it&amp;#8217;s required or just recommended by the pattern) interfaces are used in preference of classes in order to further reduce the coupling. I think this is great in terms of testability: all external dependencies of an object is possible to configure/mock so you can test objects in isolation. Another great gain is that highly coupled designs become evident&amp;#8212;classes with many external dependencies are easy to hide if the only way to notice the dependencies is to look at the source.&lt;/p&gt;


	&lt;p&gt;Dependency Injection (DI) is a technique to manage all the dependencies that IoC makes apparent. E.g. Spring figures out, aided by &lt;span class="caps"&gt;XML&lt;/span&gt; configuration and introspection, which objects that needs to be created for a certian class, create those objects and uses constructors and setters in order to inject the dependencies. Pretty neat to see Rod&amp;#8217;s demonstrations of Spring and IoC/DI.&lt;/p&gt;


	&lt;p&gt;Singelton begone!&lt;/p&gt;


	&lt;p&gt;Spring also has its own support for &lt;span class="caps"&gt;AOP &lt;/span&gt;(working in a similar way as Rickard&amp;#8217;s using dynamic proxies), and Rod pointed out that it&amp;#8217;s a good idea to unit test classes without aspects since you want to test classes in isolation. Let&amp;#8217;s say you have a security aspect, then it probably needs some setup in order to run, and that seems like a lot of work for a unit test and many thing that might go wrong and interfere with the tests, it&amp;#8217;s more of integration test issue. That&amp;#8217;s no problem in Spring since objects are just &lt;span class="caps"&gt;POJ&lt;/span&gt;Os (plain old java objects), aspects are added by the Spring container so when you don&amp;#8217;t use the Spring container you have no aspects. But how do you do that in e.g. &lt;a href="http://eclipse.org/aspectj/"&gt;AspectJ&lt;/a&gt; where the aspects become part of the bytecode? There is an infant project called &lt;a href="http://www.aunit.org/"&gt;aUnit&lt;/a&gt;, but that seems to just unit test aspects themselves in isolation. Or do you just use a different, non-AOP aware, compiler? Does anyone out there have any suggestions?&lt;/p&gt;


	&lt;p&gt;There were also a lot of other things in Spring that were very appealing. More metadata and code than Ruby on Rails, but if I&amp;#8217;ll do anything server related in Java, I will certainly look at Spring.&lt;/p&gt;


	&lt;p&gt;One thing that I thought of while listening to all the interesting stuff about &lt;span class="caps"&gt;AOP&lt;/span&gt;, IoC/DI was how this would translate into the Ruby/Python world. The concepts apply even there, but the programming languages are more hackable than Java, thus it ought to be eaiser to achieve. There are probably many different approaches in the Ruby/Python world that I will have to look into.&lt;/p&gt;


	&lt;p&gt;Great conference! Would gladly come back if they manage to get as good, or even better, speakers!&lt;/p&gt;</content>
  </entry>
</feed>
