<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comments on: Some thoughts on Event-Based Components</title>
	<atom:link href="http://www.minddriven.de/index.php/technology/development/event-based-components/feed" rel="self" type="application/rss+xml" />
	<link>http://www.minddriven.de/index.php/technology/development/event-based-components</link>
	<description>Matthias Jauernig -- .NET technology, architecture and design</description>
	<lastBuildDate>Thu, 02 Feb 2012 06:42:23 +0100</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.1</generator>
	<item>
		<title>By: Carsten Posingies</title>
		<link>http://www.minddriven.de/index.php/technology/development/event-based-components/comment-page-1#comment-6518</link>
		<dc:creator>Carsten Posingies</dc:creator>
		<pubDate>Wed, 16 Nov 2011 20:47:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.minddriven.de/?p=886#comment-6518</guid>
		<description>Matthias,

although this is a pretty old post in terms of the speed of &quot;software development&quot; development, I ought to drop a few notes.

First of all, I do agree that there is a &quot;lack of common&quot;. On a circuit board, you&#039;d better agree on a certain Voltage, like 0..5 V+=. Something like a short-circuit brining the 230 V~ to the board would evaporize it. As long as the components (yes, components, back to the old days...) don&#039;t protected themselves.

What sexy thingy could possibly protect the components from being blown up this way? Well, you guessed it: a microkernel.

At least in my opinion, Ralf&#039;s idea becomes revolutionary when you drop your affiction to method signatures, and draw your attention to messages aka data carriers aka payloads.

Opposite to electric circuits, where the only language spoken would be electric charge, expressed in Volts and Watts, events could, if we let them, throw around anything, even dynamics. Just add a [Serializable] attribute. Although I&#039;d agree that the simpler the definition was, the better we&#039;d walk away, we could still leave any verification to the receiving component, as long as we implement a good fuse.

The most important thing that Ralf offered with the EBCs, at least in my humble opinion, is that there is no &quot;response&quot;. What in turn lets any x-tier architecture become deprecated. If you want to talk to me, throw a ball at my direction. If I want to talk to you, I&#039;ll throw a ball at your direction. As simple as it sounds, as simple it is. No more hierarchies. Call it democracy at the level of data containers (aka SOAP messages, be it inProc or outProc, it doesn&#039;t matter).

As long as all parties involved speak the same language (repeat: as I said, that&#039;s a microkernel&#039;s job), you, as a coder, &quot;just&quot; have to say goodbye to orchestration.</description>
		<content:encoded><![CDATA[<p>Matthias,</p>
<p>although this is a pretty old post in terms of the speed of &#8220;software development&#8221; development, I ought to drop a few notes.</p>
<p>First of all, I do agree that there is a &#8220;lack of common&#8221;. On a circuit board, you&#8217;d better agree on a certain Voltage, like 0..5 V+=. Something like a short-circuit brining the 230 V~ to the board would evaporize it. As long as the components (yes, components, back to the old days&#8230;) don&#8217;t protected themselves.</p>
<p>What sexy thingy could possibly protect the components from being blown up this way? Well, you guessed it: a microkernel.</p>
<p>At least in my opinion, Ralf&#8217;s idea becomes revolutionary when you drop your affiction to method signatures, and draw your attention to messages aka data carriers aka payloads.</p>
<p>Opposite to electric circuits, where the only language spoken would be electric charge, expressed in Volts and Watts, events could, if we let them, throw around anything, even dynamics. Just add a [Serializable] attribute. Although I&#8217;d agree that the simpler the definition was, the better we&#8217;d walk away, we could still leave any verification to the receiving component, as long as we implement a good fuse.</p>
<p>The most important thing that Ralf offered with the EBCs, at least in my humble opinion, is that there is no &#8220;response&#8221;. What in turn lets any x-tier architecture become deprecated. If you want to talk to me, throw a ball at my direction. If I want to talk to you, I&#8217;ll throw a ball at your direction. As simple as it sounds, as simple it is. No more hierarchies. Call it democracy at the level of data containers (aka SOAP messages, be it inProc or outProc, it doesn&#8217;t matter).</p>
<p>As long as all parties involved speak the same language (repeat: as I said, that&#8217;s a microkernel&#8217;s job), you, as a coder, &#8220;just&#8221; have to say goodbye to orchestration.</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: MatthiasJ</title>
		<link>http://www.minddriven.de/index.php/technology/development/event-based-components/comment-page-1#comment-6290</link>
		<dc:creator>MatthiasJ</dc:creator>
		<pubDate>Sun, 05 Sep 2010 08:29:47 +0000</pubDate>
		<guid isPermaLink="false">http://www.minddriven.de/?p=886#comment-6290</guid>
		<description>Hi Ralph,

Thanks a lot for your detailed comment. I think it&#039;s a good thing to dispute with both concepts (IBC and EBC) in a critical way. During the last weeks I got the feeling that people missed this important discussion and were hyping EBCs too much just because this style of programming is &quot;different&quot; (but without questioning the backgrounds and impacts)...

Back to your comment: it&#039;s adding some new aspects that I didn&#039;t see before. I&#039;m not very certain about them, but I think it&#039;s time to dig deeper into EBCs again ;-) I&#039;m still an interface guy and like them as formal contract. In your comment you say when a component C calls f() and g(), an interface for f() and g() doesn&#039;t make sense. I believe it makes sense when f() and g() belong to the same logical context and thus should be coupled into an interface. This explicitness IMHO improves readability and comprehensibility. 

I think EBCs could get big with tools. Tools for binding, tools for navigation, but most of all tools for visualizing EBC systems. With such tools we could start to see EBCs not on a class/method base, but on a bigger scale as component systems. And this would be a big deal! Are such tools on their way yet?

~ Matthias

P.S.: EBC 2.0? Where can I find information/descriptions about that?</description>
		<content:encoded><![CDATA[<p>Hi Ralph,</p>
<p>Thanks a lot for your detailed comment. I think it&#8217;s a good thing to dispute with both concepts (IBC and EBC) in a critical way. During the last weeks I got the feeling that people missed this important discussion and were hyping EBCs too much just because this style of programming is &#8220;different&#8221; (but without questioning the backgrounds and impacts)&#8230;</p>
<p>Back to your comment: it&#8217;s adding some new aspects that I didn&#8217;t see before. I&#8217;m not very certain about them, but I think it&#8217;s time to dig deeper into EBCs again <img src='http://www.minddriven.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  I&#8217;m still an interface guy and like them as formal contract. In your comment you say when a component C calls f() and g(), an interface for f() and g() doesn&#8217;t make sense. I believe it makes sense when f() and g() belong to the same logical context and thus should be coupled into an interface. This explicitness IMHO improves readability and comprehensibility. </p>
<p>I think EBCs could get big with tools. Tools for binding, tools for navigation, but most of all tools for visualizing EBC systems. With such tools we could start to see EBCs not on a class/method base, but on a bigger scale as component systems. And this would be a big deal! Are such tools on their way yet?</p>
<p>~ Matthias</p>
<p>P.S.: EBC 2.0? Where can I find information/descriptions about that?</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Ralf Westphal</title>
		<link>http://www.minddriven.de/index.php/technology/development/event-based-components/comment-page-1#comment-6286</link>
		<dc:creator>Ralf Westphal</dc:creator>
		<pubDate>Wed, 01 Sep 2010 07:39:40 +0000</pubDate>
		<guid isPermaLink="false">http://www.minddriven.de/?p=886#comment-6286</guid>
		<description>Thx, Matthias, for your review of EBC. I mostly concurr with your opinion. In a couple points I beg to differ, though:

Interfaces as formal contracts are not missing from EBC. Right to the contrary! You can still define the offerings of an EBC component like your DataAccessComponent using an interface. And that´s even better than with IBC. Because in order to specify an IBC completely (like your BusinessClient) you´d need to list all exported interfaces as well as all imported interfaces. In your case that would be IBusinessClient + IDataAccessComponent.

In the EBC world the specification of the BusinessClient component would be just IBusinessClient.

I deem this an advantage over IBC. Specifications are more compact.

You´re right in that the current bindings are a bit cumbersome. EBC surely would benefit from generating them from some DSL.

However I find in my daily EBC practise that this drawback is only minimal compared to what is gained from EBC.

a) EBC &quot;require&quot; you to clearly separate domain functionality from code that just composes such functionality. It is a very helpful separation of concerns.

b) The difficult to read binding code usually is not very long. Due to the ease with which you can design on different levels of abstractions (compared to IBC) EBC boards are kept quite small.
In addition it is recommended to keep the design sketches with your code. They are a &quot;poor mans DSL&quot; until there is a designer tool. If you do that look at them to understand your software, not the wiring code in the boards. It´s a common mistake to stay glued to the code instead of using diagrams. With UML I understand why people do that; diagrams and code quickly get out of sync because it´s hard to translate from diagram into code. But that´s different with EBC. The translation is trivial. Thus the code is in sync with the diagram. And changes should flow from the diagram/design to the code.

So EBC fosters a less ad hoc, less cowboy programmer way of software development. Look at the cumbersome wiring code as a feature instead of a bug ;-) It´s a constant reminder to program in a clean way. Yes, that takes some getting used to it... but my experience is that´s worthwhile.

c) Although the wiring code is kinda hard to read it in fact is simple. It´s so regular... Once you develop an eye for it, it´s not that hard to comprehend anymore. I deem this simplicity very important. It makes software more predictable in its form. And that helps evolving it.

d) EBC very explicitly deal with dependencies. The only dependencies left are concentrated in board. And these board don´t have any domain functionality on them. So highly dependent code is simple. And complicated code is independent. That´s in accordance with all good principles of software development. Dependencies are the developers bane -  penning them up in a few places thus is a great help.

Finally one word about topological dependencies as I termed them: They make IBC dependent on how functionality is grouped. If component C needs functions f() and g() it´s dependent on them. Maybe that cannot be avoided. But why in all the world should C also be dependent on f() and g() being lumped together on an interface?

As long as that´s the case C has two reasons to change (which is against the SRP): it needs to change if new domain requirements come up regarding its domain responsibility; and it needs to change if f() and g() are rearranged onto different interfaces for whatever reason. That´s bad.

-Ralf

PS: I suggest all interested in EBC to have a look at EBC 2.0. It´s a whole different view on how to carve out components from requirements. And the beauty of it: the nasty request/response communication simply goes away... :-)

PPS: Just for the record: I´m not advovating giving up IBC altogether! Even EBC rely on them for defining EBC boards. But also beyond that IBC are of value. Don´t try to throw them away. They can be of great use within EBC parts/actions (atomic EBC components).</description>
		<content:encoded><![CDATA[<p>Thx, Matthias, for your review of EBC. I mostly concurr with your opinion. In a couple points I beg to differ, though:</p>
<p>Interfaces as formal contracts are not missing from EBC. Right to the contrary! You can still define the offerings of an EBC component like your DataAccessComponent using an interface. And that´s even better than with IBC. Because in order to specify an IBC completely (like your BusinessClient) you´d need to list all exported interfaces as well as all imported interfaces. In your case that would be IBusinessClient + IDataAccessComponent.</p>
<p>In the EBC world the specification of the BusinessClient component would be just IBusinessClient.</p>
<p>I deem this an advantage over IBC. Specifications are more compact.</p>
<p>You´re right in that the current bindings are a bit cumbersome. EBC surely would benefit from generating them from some DSL.</p>
<p>However I find in my daily EBC practise that this drawback is only minimal compared to what is gained from EBC.</p>
<p>a) EBC &#8220;require&#8221; you to clearly separate domain functionality from code that just composes such functionality. It is a very helpful separation of concerns.</p>
<p>b) The difficult to read binding code usually is not very long. Due to the ease with which you can design on different levels of abstractions (compared to IBC) EBC boards are kept quite small.<br />
In addition it is recommended to keep the design sketches with your code. They are a &#8220;poor mans DSL&#8221; until there is a designer tool. If you do that look at them to understand your software, not the wiring code in the boards. It´s a common mistake to stay glued to the code instead of using diagrams. With UML I understand why people do that; diagrams and code quickly get out of sync because it´s hard to translate from diagram into code. But that´s different with EBC. The translation is trivial. Thus the code is in sync with the diagram. And changes should flow from the diagram/design to the code.</p>
<p>So EBC fosters a less ad hoc, less cowboy programmer way of software development. Look at the cumbersome wiring code as a feature instead of a bug <img src='http://www.minddriven.de/wp-includes/images/smilies/icon_wink.gif' alt=';-)' class='wp-smiley' />  It´s a constant reminder to program in a clean way. Yes, that takes some getting used to it&#8230; but my experience is that´s worthwhile.</p>
<p>c) Although the wiring code is kinda hard to read it in fact is simple. It´s so regular&#8230; Once you develop an eye for it, it´s not that hard to comprehend anymore. I deem this simplicity very important. It makes software more predictable in its form. And that helps evolving it.</p>
<p>d) EBC very explicitly deal with dependencies. The only dependencies left are concentrated in board. And these board don´t have any domain functionality on them. So highly dependent code is simple. And complicated code is independent. That´s in accordance with all good principles of software development. Dependencies are the developers bane &#8211;  penning them up in a few places thus is a great help.</p>
<p>Finally one word about topological dependencies as I termed them: They make IBC dependent on how functionality is grouped. If component C needs functions f() and g() it´s dependent on them. Maybe that cannot be avoided. But why in all the world should C also be dependent on f() and g() being lumped together on an interface?</p>
<p>As long as that´s the case C has two reasons to change (which is against the SRP): it needs to change if new domain requirements come up regarding its domain responsibility; and it needs to change if f() and g() are rearranged onto different interfaces for whatever reason. That´s bad.</p>
<p>-Ralf</p>
<p>PS: I suggest all interested in EBC to have a look at EBC 2.0. It´s a whole different view on how to carve out components from requirements. And the beauty of it: the nasty request/response communication simply goes away&#8230; <img src='http://www.minddriven.de/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
<p>PPS: Just for the record: I´m not advovating giving up IBC altogether! Even EBC rely on them for defining EBC boards. But also beyond that IBC are of value. Don´t try to throw them away. They can be of great use within EBC parts/actions (atomic EBC components).</p>
]]></content:encoded>
	</item>
	<item>
		<title>By: Johannes</title>
		<link>http://www.minddriven.de/index.php/technology/development/event-based-components/comment-page-1#comment-6267</link>
		<dc:creator>Johannes</dc:creator>
		<pubDate>Mon, 23 Aug 2010 18:51:42 +0000</pubDate>
		<guid isPermaLink="false">http://www.minddriven.de/?p=886#comment-6267</guid>
		<description>In fact, Ralf is currently working on a &quot;DI container&quot; for EBCs: http://ebcbinder.codeplex.com/

I totally agree to the lag of overview:
We are using the image of electronic circuits, which includes the components (== classes), the output-pins (== events) and the input-pins (== methods). The solder would be the EBC binder.

But we are still missing a circuit board! It would give us an overview of the connected (or faulty connected) pins. I’m thinking of a designer like the one for the Windows Workflow foundation... This could be the missed tool.

I’m going to watch the progress of EBC. Let’s see if it can join the club of the standard design patterns.</description>
		<content:encoded><![CDATA[<p>In fact, Ralf is currently working on a &#8220;DI container&#8221; for EBCs: <a href="http://ebcbinder.codeplex.com/" rel="nofollow">http://ebcbinder.codeplex.com/</a></p>
<p>I totally agree to the lag of overview:<br />
We are using the image of electronic circuits, which includes the components (== classes), the output-pins (== events) and the input-pins (== methods). The solder would be the EBC binder.</p>
<p>But we are still missing a circuit board! It would give us an overview of the connected (or faulty connected) pins. I’m thinking of a designer like the one for the Windows Workflow foundation&#8230; This could be the missed tool.</p>
<p>I’m going to watch the progress of EBC. Let’s see if it can join the club of the standard design patterns.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

