So, about a year and a half ago, I was working in Developer Division and there were lots of discussions about different kinds of components…  it seemed that everyone was talking past each other and meant really different things about they meant by a component.  I decided to try to identify three different meanings of the word “component”.   To avoid debates over the naming, I chose the really ridiculous names:  “Baby-Bear”, “Momma-Bear”, and “Papa-Bear” to describe the different things meant by different folks when they talked about a component… of course, these names were not meant as serious but it did lead to some illustrative discussions about the “Three Bears”.   Last week, Krzysztof Cwalina asked me to post a description of the “Three Bears” because it would be helpful for him in describing their project, MEF.   Here goes…

The idea is that there are three different types of components. 

  • Baby-Bears are much like the classic object with inheritance, reference-passing, and synchronous interactions with their callers.  
  • Momma-Bears (closely related to what is provided by MEF), are comprised of multiple Baby-Bears.  While exhibiting synchronous call patterns, they do not support pass-by-reference nor inheritance.  They will, however, allow for support of dependency injection.
  • Papa-Bears are the biggest of the three and are most similar to a SOA Service.   A Papa-Bear will typically be composed of multiple Momma-Bears.   Papa-Bears interact with their partners asynchronously, are frequently remote, do not support pass-by-reference or inheritance, and may be offline.


My interest has always been in the realm of the Papa-Bear and other projects have focused more in the realm of the Baby-Bear and the Momma-Bear.   I will leave it to Krzysztof to explain MEF (which I believe is more akin to the Momma-Bear) type of component.

Anyway, this is what I like to call “Building Blocks and the Three Bears”.

- Pat