<?xml version="1.0" encoding="UTF-8" ?>
<?xml-stylesheet type="text/xsl" href="http://blogs.msdn.com/utility/FeedStylesheets/rss.xsl" media="screen"?><rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:slash="http://purl.org/rss/1.0/modules/slash/" xmlns:wfw="http://wellformedweb.org/CommentAPI/"><channel><title>Jezz Santos : EFx Software Factory</title><link>http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx</link><description>Tags: EFx Software Factory</description><dc:language>en-GB</dc:language><generator>CommunityServer 2.1 SP1 (Build: 61025.2)</generator><item><title>EFx Factory Futures</title><link>http://blogs.msdn.com/jezzsa/archive/2007/01/17/efx-factory-futures.aspx</link><pubDate>Thu, 18 Jan 2007 00:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1438714</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1438714.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1438714</wfw:commentRss><description>&lt;P&gt;Well, its time to (officially) announce the end of further development of the &lt;A href="http://msdn2.microsoft.com/en-us/library/Aa905331.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/Aa905331.aspx"&gt;EFx Factory&lt;/A&gt;&amp;nbsp;prototype! and open a new chapter on software factories for our customers.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[In actual fact, not really hot-off-the-press news, this post has been pending getting published for some months now.]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;The pioneering work on EFx has not been in vain. The good news is that many of the innovations, learnings, patterns&amp;nbsp;and assets, from this factory are to be absorbed into future factories from Microsoft, thanks to the patterns &amp;amp; practices team. You can expect to see some of the more powerful features exemplified in EFx (such as:&amp;nbsp;Product Modelling, Runtime Integration, Technology Separation and Extensibility for Composability) in the next versions of the &lt;A href="http://go.microsoft.com/fwlink/?linkid=67205&amp;amp;clcid=0x409" mce_href="http://go.microsoft.com/fwlink/?linkid=67205&amp;amp;clcid=0x409"&gt;Service&amp;nbsp;Factory&lt;/A&gt;. The gap you see now between these two factories (discussed in detail &lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/11/14/faq-how-does-efx-factory-differ-from-the-web-service-factory.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/11/14/faq-how-does-efx-factory-differ-from-the-web-service-factory.aspx"&gt;in How does EFx differ from Service Factory?)&lt;/A&gt;&amp;nbsp;will start to close now, as we consolidate our experiences, and ramp up with a new software factory platform - go the &lt;A href="http://go.microsoft.com/fwlink/?linkid=67205&amp;amp;clcid=0x409" mce_href="http://go.microsoft.com/fwlink/?linkid=67205&amp;amp;clcid=0x409"&gt;Service&amp;nbsp;Factory&lt;/A&gt;!&lt;/P&gt;
&lt;P&gt;The stuff in EFx was too good to ignore, (our customers really wanted to get their hands on it), and its only been a matter of finding the right channels to get this out publicly (to have the largest impact on our customer problems), which has really been the major challenge to date. Now that we have found that channel, you should expect to see even more innovations and compelling features in the new generation of software factories to come. &lt;/P&gt;
&lt;P&gt;As for myself, I'll continue to work passionately on software factories, in the hope of '&lt;STRONG&gt;making sense of it for you'&lt;/STRONG&gt; (the tag line of this blog). &lt;/P&gt;
&lt;P&gt;There are still many challenges&amp;nbsp;in making enterprise development a cheaper, easier and more predictable experience with reliable results using factories, and hopefully I'll share with the community some of the past experiences, patterns and techniques&amp;nbsp;in this area that we have identified as key with building your factories. &lt;/P&gt;
&lt;H2&gt;Looking Forward&lt;/H2&gt;
&lt;P&gt;Currently, this industry is on the brink of the adoption of software factories, and we currently find ourselves in a limbo, waiting for a platform to assist with the vision and boost adoption. &lt;/P&gt;
&lt;P&gt;Many customers have identified and committed to&amp;nbsp;a strategy to move forward with software factories, but without support from the platform, and experience and knowledge transfer in this&amp;nbsp;domain,&amp;nbsp;this task at hand seems ominously difficult, or hopelessly un-informed. &lt;/P&gt;
&lt;P&gt;Those of us that took the plunge earlier on, without any formal &amp;nbsp;platform, can testify that building factories is not an effortless undertaking. The rewards of those efforts are starting to come to fruition for the betterment of others. The earlier attempts, in various forms, should begin now to coalesce into a shared experience, and impact the future direction of this space.&lt;/P&gt;
&lt;P&gt;Building factories today is hard. It's both hard to know what to build, and hard to know how to build it. Also, the current platform for building them is difficult to manipulate and esoteric. All this gets worse when you know we are in the shadow of a new platform that will soon to leap frog us forward again. But there are incremental advances being made all the time by many different people. It's going to take sometime before we have a fully realised vision, but this is no different than any other critical innovation in our industry, we will do it in small (verifiable) increments. Hopefully, we will be providing a bunch of tools to make this more achievable in the near future.&lt;/P&gt;
&lt;P&gt;Most people have not witnessed the power of a real software factory yet. For most, it's hard to understand what they are and what benefit&amp;nbsp;they offer the current software development market today. For those of us that have witnessed them, the potential is sobering and the benefits crystal clear. It's easy to see therefore what the future of factories can bring this industry, and how that will shape the future of software development.&amp;nbsp;I hope most of you will start to witness that in the coming months.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1438714" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Development+Truths/default.aspx">Software Development Truths</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Web+Services+Software+Factory/default.aspx">Web Services Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>FAQ - How does EFx Factory differ from the Web Service Factory?</title><link>http://blogs.msdn.com/jezzsa/archive/2007/01/17/faq-how-does-efx-factory-differ-from-the-web-service-factory.aspx</link><pubDate>Wed, 17 Jan 2007 12:50:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1076364</guid><dc:creator>jezzsa</dc:creator><slash:comments>3</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1076364.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1076364</wfw:commentRss><description>&lt;p&gt;Naturally, I get asked this all the time.  &lt;p&gt;&lt;strong&gt;What are the differences between the 'EFx Factory' and software factories such as the 'Web Service Software Factory' from patterns &amp;amp; practices?&lt;/strong&gt;  &lt;p&gt;&lt;em&gt;[Now, I do need to say this, I do work closely with the patterns &amp;amp; practices teams who built Service Factory, in fact, I am still a member of the expert advisory board on that project. So, I do need to be careful how I word this :) or &lt;/em&gt;&lt;a href="http://blogs.msdn.com/donsmith"&gt;&lt;em&gt;Don&lt;/em&gt;&lt;/a&gt;&lt;em&gt; and &lt;/em&gt;&lt;a href="http://blogs.msdn.com/tomholl"&gt;&lt;em&gt;Tom&lt;/em&gt;&lt;/a&gt;&lt;em&gt; will kill me.]&lt;/em&gt; &lt;p&gt;My aim here is to give a fair comparison between the two factories from the point of view of the customers using them and market assessing them. What is available today, and what customers can expect to see from factories in this space in the future (especially from Microsoft). Therefore, this is not about how they were implemented technically, but more about how they are designed, and how they are used to do what they do from the customer end-user perspective. &lt;p&gt;I thought this was going to be a brief post, but I was wrong again. (I'll get there eventually).  &lt;p&gt;&lt;em&gt;[I'm using &lt;font color="#804000"&gt;colour&lt;/font&gt; &lt;font color="#004080"&gt;to&lt;/font&gt; &lt;font color="#804000"&gt;distinguish&lt;/font&gt; &lt;font color="#004080"&gt;the&lt;/font&gt; &lt;font color="#804000"&gt;answers&lt;/font&gt; &lt;font color="#004080"&gt;for&lt;/font&gt; &lt;font color="#804000"&gt;each&lt;/font&gt; &lt;font color="#004080"&gt;factory, &lt;font color="#804000"&gt;and&lt;/font&gt; aid &lt;/font&gt;&lt;font color="#804000"&gt;readability &lt;/font&gt;&lt;font color="#004080"&gt;(hopefully). &lt;font color="#804000"&gt;Not&lt;/font&gt; here &lt;font color="#804000"&gt;of&lt;/font&gt; course, &lt;font color="#804000"&gt;but&lt;/font&gt; below.]&lt;/font&gt;&lt;/em&gt; &lt;h2&gt;Backgrounder&lt;/h2&gt; &lt;h3&gt;The Basics&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn.com/servicefactory"&gt;Web Service Software Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; (Service Factory) is a released public available deliverable from the &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn.microsoft.com/practices/"&gt;patterns &amp;amp; practices&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; group. Currently, it's&amp;nbsp;in version 2.0 and addresses building secure ASMX or WCF web service layers and building data access layers.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa905331.aspx"&gt;EFx Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt; is a limited, unreleased, prototype&amp;nbsp;offering developed within &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://www.microsoft.com/services/microsoftservices/srv_application.mspx"&gt;Microsoft Consulting Services&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. Currently, version 0.9 and not complete or released. It provides the end-to-end architecture for building both Client Applications and Web Services with a choice of any combination of technologies.&lt;/font&gt;  &lt;p&gt;Both factories target similar problem and solution&amp;nbsp;domains and are both founded upon well known &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET architectural patterns&lt;/a&gt; and other assets and deliverables from the &lt;a href="http://msdn.microsoft.com/practices/"&gt;patterns &amp;amp; practices&lt;/a&gt; group.  &lt;p&gt;Let’s have a look at both factories from a high level, and then we’ll consider the differences in detail in the answer below. If you are familiar with these factories already, then skip this part and move straight to the answer section below.  &lt;h3&gt;Web Service Software Factory (Service Factory)&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The objectives at the start of this project (circa start of 2006)&amp;nbsp;were to make building web services easier, quicker and provide the right guidance and patterns to implement them. At the time of inception, the application of Software Factories was not well understood and the DSL toolkit was in its infancy. GAT was a recent enabling technology investment made by p&amp;amp;p which steered them to more automation than modelling approach. The p&amp;amp;p project team (consisting of some web service pattern legends: &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://blogs.msdn.com/thehoggblog/"&gt;Jason Hogg&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt;, &lt;/font&gt;&lt;font color="#004080"&gt;&lt;a href="http://blogs.msdn.com/donsmith"&gt;Don Smith&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt;&amp;nbsp;et al. and a number of key industry expert advisors and leaders from our partners and customers) had heaps of valuable web service guidance to put into the factory. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The approach taken was focused on implementing web service patterns with ASMX, and&amp;nbsp;now WCF technology, and on providing the factory user with the source code and solution structure to flesh out the service functionality. Using available p&amp;amp;p deliverables such as GAT, a set of Guidance Packages (GP's)&amp;nbsp;do the code generation from a set of recipes and&amp;nbsp;wizards which capture the user’s settings and generated configuration and source code (via the Text Templating Engine). From there, the developer is expected to enhance the generated source code in order to complete the solution. It also includes recipes for automating some common development tasks.&amp;nbsp;As well, the deliverables include a great deal of invaluable documentation, reference implementations, and guidance for designing and creating web services and implementing web service patterns today. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;You can find more details about the features of Service Factory &lt;a href="http://msdn.com/servicefactory"&gt;here&lt;/a&gt;.&lt;/font&gt;  &lt;h3&gt;EFx Software Factory (EFx)&lt;/h3&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory evolved from an &lt;/font&gt;&lt;font color="#804000"&gt;Architectural Application Framework&lt;/font&gt;&lt;font color="#804000"&gt; called &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677117/500x263.aspx"&gt;'Enterprise Framework'&lt;/a&gt; (circa 2003) which itself is founded upon Enterprise Library and a number of other application blocks. The project was initiated internally within Microsoft in response to demand from customers and partners for a implementation of the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET architecture&lt;/a&gt; and enterprise development patterns prescribed in written form from the patterns &amp;amp; practices group. Over a long period of time, the framework has encapsulated these patterns implemented on the .NET framework and has refined class libraries to aid the construction of client applications and services according to these architectures as the .NET platform has evolved. The net result of using the architectural application framework was that a developer need only write a small amount of source code to complete a service/application. The software factory that evolved from this framework (circa mid 2005), focused upon the modelling, tooling and automation of the variability points of the architectures of the client applications and services. The framework provided or pointed to most of these abstractions&amp;nbsp;that would have otherwise have been coded directly&amp;nbsp;to the framework class libraries. The primary focus of the factory&amp;nbsp;has been architectural guidance, usability, and the separation of the technologies that would be used to implement various layers of the architecture. In effect, the&amp;nbsp;factory allows any technology, pattern or strategy to be used to implement the various architectural layers, which promotes re-use and composability of factory variants.&lt;/font&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;You can find more details about the features of the EFx Factory &lt;a href="http://en.wikipedia.org/wiki/EFx_Factory"&gt;here&lt;/a&gt;.&lt;/font&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;So let’s have a look at the key differences of these two factories, in detail.  &lt;p&gt;&lt;i&gt;[For the purposes of this comparison, we are only going to compare the ‘services’ that are built with the EFx Factory to the ‘service’ that is built with the Service Factory. &lt;/i&gt; &lt;p&gt;&lt;i&gt;The EFx Factory actually assembles not only ‘services’, but also ‘client applications’ and also ‘systems’ which are a combination of multiple client applications and multiple services together as one product. &lt;/i&gt; &lt;p&gt;&lt;i&gt;Furthermore, the EFx Factory is somewhat of a different generation of software factory, being much closer to implementing the &lt;a href="http://software-factories-swicki.eurekster.com/Pillars+of+Software+Factories/"&gt;pillars of factories&lt;/a&gt; (Model-Driven Development, Architectural Frameworks, Product Lines, Guidance in Context) and raising the level of abstraction&amp;nbsp;to logical design rather than physical design, so it's not really a level-playing field to do an exact&amp;nbsp;comparison.]&lt;/i&gt;  &lt;h3&gt;Factory Mechanics&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;Service Factory is the following: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#004080"&gt;&lt;strong&gt;A set of Guidance Packages,&lt;/strong&gt; one per technology and architectural layer: ASMX, WCF, SQL. These create initial solution structure, and primarily generate source code artefacts for each layer directly into the solution structure, invoked from projects in the physical solution structure.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#804000"&gt;EFx Factory is the following: &lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Guidance Packages &lt;/strong&gt;to create initial solution structure, and create the logical work products of the architecture, invoked from a view of the logical architecture of the product, DSL models and Visual Studio Application and System designers.&amp;nbsp; &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;DSL designers&lt;/strong&gt; to visualise and define the 'specification' of the internals of the applications and services. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Factory runtime &lt;/strong&gt;tools &amp;amp; runtime services to provide, view, and manage the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Model&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, exposing a public&amp;nbsp;automation API of the factory and its product. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;A pluggable technology extensibility mechanism &lt;/strong&gt;(models and programming interfaces) for other 3&lt;sup&gt;rd&lt;/sup&gt; party factories to plug in and extend and enhance the provided technology-independent models - enabling re-use and composability. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Integrated extensions&lt;/strong&gt; to the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed Application and Systems designers of Visual Studio&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, enabling top-down development of the service.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;h3&gt;Assets &lt;/h3&gt; &lt;p&gt;Both factories deliver guidance assets that automate the development of the factory product (the service).  &lt;p&gt;&lt;font color="#004080"&gt;The guidance assets included in Service Factory&amp;nbsp;provide &lt;strong&gt;invaluable guidance for service implementation of WCF and ASMX&lt;/strong&gt; technology web services, and &lt;strong&gt;data mapping to and from a SQL database&lt;/strong&gt;. These assets&amp;nbsp;include a number of key&amp;nbsp;innovations in web service patterns and secure web services&amp;nbsp;with class libraries to implement common concerns in building services (i.e. Exception Shielding, Versioning&amp;nbsp;etc.). &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The factory delivers &lt;strong&gt;comprehensive written guidance on web service architecture, and message exchange patterns&lt;/strong&gt;, to aid in&amp;nbsp;completing the services which it initiates. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;It also includes reference implementations to act as examples of what the factory can create using this guidance.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory core assets are &lt;strong&gt;based upon service oriented, and enterprise architecture patterns,&lt;/strong&gt; separating the architecture and design of a web service from the technology implementing it. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory includes &lt;strong&gt;an Architectural Application Framework&lt;/strong&gt;, itself an abstraction of Enterprise Library, and this framework underpins the models and artefacts which the factory creates. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory also includes a reference implementation, but minimal documentation of its use.&lt;/font&gt;  &lt;h3&gt;Solution Structure&lt;/h3&gt; &lt;p&gt;Both factories provide solution templates that determine the&amp;nbsp;initial physical solution structure (solution folders, projects, and layout etc) of a service.  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478584/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478584/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478566/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478566/secondarythumb.aspx"&gt;&lt;/a&gt;&amp;nbsp;  &lt;p&gt;Both use recipes to define the structure and naming of the solution and its artefacts. The physical solution structure is viewed using the familiar ‘Solution Explorer’. Both factory's solution templates can be customized, in both structure, layout&amp;nbsp;and naming. &lt;/p&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478595/secondarythumb.aspx"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478585/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478585/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&amp;nbsp;  &lt;p&gt;Both factories use metadata on the created artefacts (solution folders, project etc).  &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, this metadata &lt;strong&gt;determines the ‘responsibilities’ of the containing artefact&lt;/strong&gt; (solution folder, project). The metadata &lt;strong&gt;denotes the type of physical artefacts that are contained in the container artefact&lt;/strong&gt;, and furthermore &lt;strong&gt;determines what actions (recipes) can be applied to them&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The &lt;strong&gt;assignment of these responsibilities is configurable&lt;/strong&gt; by the factory user.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478602/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478602/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478603/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478603/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#804000"&gt;In EFx Factory, this metadata &lt;strong&gt;exposes the meta-model of a logical work product&lt;/strong&gt; the factory is assembling (i.e. a service interface or business component, etc). In other words, a containing artefact (solution folder or project) &lt;strong&gt;is the physical representation of one of the logical work products&lt;/strong&gt; of the service (i.e. Service Interface, business components, data contracts etc). &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;The metadata describes the actual state and properties (configuration) of the work product&lt;/strong&gt;, and the containing artefact (solution folder, project) contains the physical artefacts of that work product within it. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The work products of the service are configured in a &lt;strong&gt;separate view of the factory’s logical product in another window called the &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Explorer&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font color="#804000"&gt;. This view shows the logical architecture of the service.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;&amp;nbsp;&lt;/font&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677147/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;maintains a runtime mapping between the work product in the ‘Product Explorer’, and its artefact realisation in the ‘Solution Explorer’&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. &lt;/font&gt;This separation (physical from logical) enables the factory user to re-arrange the physical structure to focus upon the deployment of the solution, rather than mixing that with the logical architecture of the service.&lt;/font&gt;  &lt;h3&gt;Artefact Generation&lt;/h3&gt; &lt;p&gt;Both factories use GAT recipes and wizards to automate the creation of artefacts or work products of a service.  &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;uses recipes and wizards to either generate source code&lt;/strong&gt;, or to configure generated source code (on compiled CLR types), and automate some common development/debugging tasks. &lt;strong&gt;Source code artefacts are generated and assigned directly to the solution structure&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;uses recipes to create the work products in the logical architectural model&lt;/strong&gt;, and &lt;strong&gt;recipes to configure the metadata of the work product in the model&lt;/strong&gt;. In this way, the logical architecture of the service is separated and abstracted from the physical implementation of it.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;Some work products of the service are represented in more detail using DSL models, and &lt;strong&gt;recipes are used to configure those models directly&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory also &lt;strong&gt;uses recipes to automate the restructure and renaming of physical artefacts&lt;/strong&gt; representing the work products. For example, renaming a work product will require renaming certain physical artefacts and namespaces.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;defers and delegates source code generation of the work products to 3&lt;sup&gt;rd&lt;/sup&gt; party pluggable factories&lt;/strong&gt; at designated times in the development lifecycle of the product. The factory itself is responsible for the generation of the solution structure artefact containers (solution folders, projects), and the &lt;strong&gt;assignment of generated source code artefacts&lt;/strong&gt; (from 3&lt;sup&gt;rd&lt;/sup&gt; parties) to these artefact containers. This process is managed through the factory runtime. &lt;/font&gt; &lt;h3&gt;Models, State and Process&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, &lt;strong&gt;the source code is the 'model' of the service (albeit a 'weak' model)&lt;/strong&gt;. When creating the work products of the service (data contracts, service interfaces etc.), a recipe is invoked from the physical solution structure (solution folder, project in Solution Explorer) according to the assigned responsibilities of that folder or project. (See previous sections). &lt;strong&gt;The wizard alone provides the abstraction of, and the configuration for the 'work product'&lt;/strong&gt; (although &lt;strong&gt;there is no formal concept of a 'work product'&lt;/strong&gt; in Service Factory per se). Once the wizard is completed by the factory user, it generates the required artefacts straight into the current solution folder or project. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478605/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478605/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;There is no ‘state’ of the service expressed anywhere -&amp;nbsp;except in the source code of the service&lt;/strong&gt;. The factory (not surprisingly)&amp;nbsp;provides no round-tripping or reverse-engineering of the source code, so &lt;strong&gt;there is no way to view this 'state' at a simplified&amp;nbsp;(abstract) high-level&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;As there is no state, and the recipes are keyed from the assigned responsibilities on an solution artefact (project or solution folder), &lt;strong&gt;it's difficult to determine what activities have been performed, and what needs to be done to complete a service&lt;/strong&gt;. The &lt;strong&gt;user must be aware of (or will have to discover by right-click trial and error)&amp;nbsp;which&amp;nbsp;recipes&amp;nbsp;are assigned to which&amp;nbsp;solution folders or projects.&amp;nbsp;&lt;/strong&gt;Furthermore, they &lt;strong&gt;must be very familiar with the process of how to complete a service&lt;/strong&gt; and in &lt;strong&gt;which order they have to execute these recipes&lt;/strong&gt; to complete&amp;nbsp;the service. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;Furthermore, the user&amp;nbsp;must know at what stage of the overall process they are in&lt;/strong&gt;, as this is not depicted anywhere. This is problematic when development of the service is shared between team members. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;If the user&amp;nbsp;needs to change something about the service&amp;nbsp;that was generated by the recipes before, they either must re-run the recipe, and &lt;strong&gt;recall how they configured the recipe previously&lt;/strong&gt; beforehand. The recipe will&amp;nbsp;overwrite any customization to the generated code (if any) although the user is warned of this. Or alternatively, rather than re-run the recipe and recall all the settings used previously (usually in the case of a small change), the user can &lt;strong&gt;modify the generated source code by hand to make their change&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;does provide additional &lt;em&gt;Code Snippets&lt;/em&gt; to create the most common artefacts&lt;/strong&gt;. However, these last options are the realm only of technology domain experts, and the benefits of automation that the recipes provided is really lost.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;provides (and persists)&amp;nbsp;a model of the entire&amp;nbsp;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;product&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt; (service) and all its work product instances.&lt;/strong&gt; The product is managed in the &lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;&lt;strong&gt;Product Explorer&lt;/strong&gt;&lt;/a&gt;&amp;nbsp;view&lt;/font&gt;.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/1478608/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/1478608/secondarythumb.aspx"&gt;&lt;/a&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;primary work products have graphical DSL designers&lt;/strong&gt; in which their architecture is defined. &amp;nbsp;Recipes are used to configure these models. Because of this visual abstraction, the user (and his teammates)&amp;nbsp;can more easily visualise what state the service is in and what steps needs to be taken to complete the service. (This is aided by validation, discussed later).&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;To create or modify work product instances, &lt;strong&gt;recipes are invoked from the models themselves&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;models provide the appropriate abstraction of the components of the service&lt;/strong&gt;, its' variability points, &lt;strong&gt;and the state of the product and work product instances&lt;/strong&gt;. The recipe wizards reflect this state when they are run, and &lt;strong&gt;instead of generating code directly, these recipes act upon the work products and product model itself&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;To &lt;strong&gt;enhance the usability, and increase the productivity&amp;nbsp;of using these models, and creating work products, the factory provides a number of specific editors, recipes and wizards to configure these models&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/544743/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;  &lt;h3&gt;Abstraction &amp;amp; User Level&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In the Service Factory, because the 'model' of the service is in the source code, source &lt;strong&gt;code is essentially the medium that the factory users must manipulate&lt;/strong&gt; to create, configure and complete their service. This is a &lt;strong&gt;low-level abstraction of the solution domain.&lt;/strong&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;font color="#004080"&gt;All &lt;strong&gt;manipulation of the service is done via the 'Solution Explorer' view&lt;/strong&gt;,&amp;nbsp;which is the detailed physical view of the solution, (and best suited to display the deployment of the solution, not it's logical architecture). As long as this is the working view, the level of abstraction will always be at the source code level.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;strong&gt;As there is no state of the service, and no state of the process to completing the service, the factory user will always have to be a 'developer' class user&lt;/strong&gt; familiar with the the overall process of constructing a service from the current state of the source code (as a whole).&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;font color="#004080"&gt;In most cases, &lt;strong&gt;to modify or enhance this 'model' this developer will require expert domain knowledge and experience of the technologies&lt;/strong&gt; implemented by the factory.&lt;/font&gt;&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#004080"&gt;The&lt;strong&gt; 'Guidance Explorer' does help provide a list of steps to complete certain processes&lt;/strong&gt;, (and a log of the recipes executed previously), but it &lt;strong&gt;still does not provide a clear, reliable picture of where in the process the developer is&lt;/strong&gt; and what needs to be done next.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;In the EFx Factory,&lt;strong&gt; the model of the service is visualised in &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;DSLs&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt; and in the &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;Product Explorer&lt;/a&gt;&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;. The model offers &lt;strong&gt;high-level abstraction of the web service architecture and patterns&lt;/strong&gt;, and holds the current state of the service. Furthermore, these models do not depend on any technology. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;To change the service the user simply uses the visual abstractions (models, explorers) used to view the models.&lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;The factory &lt;strong&gt;user can be any technical user that is familiar with the patterns and architecture&amp;nbsp;used by&amp;nbsp;these abstractions&lt;/strong&gt;. &lt;/font&gt;&lt;/p&gt; &lt;p&gt;&lt;font color="#804000"&gt;The user &lt;strong&gt;can create the specification of a service without ever having to have any detailed experience of the technologies used to implement it.&lt;/strong&gt; However, &lt;strong&gt;eventually, a technology domain expert will be required to apply and optimize the various technologies&lt;/strong&gt; at some stage, but &lt;strong&gt;this activity can be deferred&lt;/strong&gt; till later in the lifecycle of the product.&lt;/font&gt;&lt;/p&gt; &lt;h3&gt;Designer Integration&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;does not leverage existing models or facilitate high-level top-down development of services&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;integrates and extends the &lt;/strong&gt;&lt;strong&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed Application and Systems designers of Visual Studio&lt;/a&gt;&lt;/strong&gt; (&lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/teamsystem/aa718804.aspx"&gt;Team Architect Edition&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&amp;nbsp;if installed). The factory provides additional shapes to represent the implementation of a service, and &lt;strong&gt;enables implementation of the service straight from these diagrams using the project templates provided by the factory&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677127/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677127/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;From the &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/ms379582(VS.80).aspx"&gt;Distributed System Designer&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, the EFx Factory &lt;strong&gt;allows the user to drill into theses shapes to expose its' internal specification&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;h3&gt;Validation &amp;amp; Completeness&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In the Service Factory, since a weak 'model' of the web service is effectively defined in source code artefacts themselves, Service Factory &lt;strong&gt;can do little (apart from depending on the language compiler) to validate whether the web service source code artefacts have been created at all, in the right order, correctly or completely to form a valid and complete web service.&lt;/strong&gt; Although, in principal&amp;nbsp;it's possible to create recipes to perform this kind of validation at a course grain level. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;The WCF guidance package does add FxCop code analysis rules that help verify the completeness of some WCF related code.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory has a comprehensive model of the service as a whole and the individual work products. The factory &lt;strong&gt;performs comprehensive validation of this model before any source artefacts are generated from it&lt;/strong&gt;. In fact, this validation is a prerequisite to generation of source artefacts. The factory &lt;strong&gt;prevents the user from making invalid architectural configurations&lt;/strong&gt;, and &lt;strong&gt;ensures the work products are configured correctly and completely&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;This &lt;strong&gt;validation&lt;/strong&gt; &lt;strong&gt;guides the factory user in pre-empting the tasks required to complete the service.&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;&lt;strong&gt;Architectural ‘concerns’ (cross-cutting concerns) for each layer in the architecture are defined in the model and enforced through validation&lt;/strong&gt;, ensuring that these concerns are addressed appropriately, and the service complies to these enterprise-level concerns.&lt;/font&gt;  &lt;h3&gt;Architectural Coverage&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory guidance packages provide automated guidance assets (recipes, templates etc) &lt;strong&gt;for the generation of the Service Interface and Data Access Layers of a service&lt;/strong&gt;. It &lt;strong&gt;addresses the middle layer Business Logic implementation and wiring up of the Service Interface&amp;nbsp;and Data Access layers through written guidance&lt;/strong&gt;, and customization of the source code. The Service Factory provides no guidance about architectural concerns of these middle layers, although there is plenty of written guidance available elsewhere on this.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx factory provides &lt;strong&gt;a comprehensive architectural model of the entire service end-to-end&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" atomicselection="true"&gt;&lt;font color="#804000"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/677134/secondarythumb.aspx"&gt;&lt;/font&gt;&lt;/a&gt;&lt;font color="#804000"&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFX factory &lt;strong&gt;models all the architectural layers, and their individual cross-cutting concerns (like: Authorization, Exception Management, Logging etc) at all layers in the architecture&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;The &lt;strong&gt;models define the interaction between the components (method mapping &amp;amp; entity mapping) in the layers&lt;/strong&gt;. The wiring up of the Service Interface to the Business Logic Components is automatic.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;Since Business Logic implementation is difficult to model (too many technology patterns and strategies). The factory instead &lt;strong&gt;offers a pluggable technology strategy&lt;/strong&gt; to implement this layer.&amp;nbsp;This strategy then wires up the business logic components to the data access layers. Common strategies are: custom coding, sequence diagrams and workflow activity diagrams, each of which is provided by a 3rd party factory that can use any pattern or technology to model this layer.&lt;/font&gt;&amp;nbsp;  &lt;h3&gt;Service Implementation Technologies&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory &lt;strong&gt;comes in two technology flavours for the service interface- WCF or ASMX&lt;/strong&gt;, and one flavour for the Data Mapping - SQL. In order to create a 'specification' of a service, &lt;strong&gt;you must make a technology choice before using the factory&lt;/strong&gt;. Once that choice is made, you are tied into that technology implementation – it is very difficult to change that technology decision later - and you'll need to start from scratch again. There is &lt;strong&gt;no de-coupling of technology implementation from architecture of the service&lt;/strong&gt; – so &lt;strong&gt;you can’t create a design and specification of your service without first choosing a technology.&lt;/strong&gt;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFX Factory &lt;strong&gt;separates the architectural&amp;nbsp;specification of the service from the technology&lt;/strong&gt; used to implement it - &lt;strong&gt;using a &lt;/strong&gt;&lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;technology-independent model&lt;/a&gt;&lt;/font&gt;&lt;/strong&gt;&lt;font color="#804000"&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;By providing these technology-independent models of the service's internal&amp;nbsp;architecture, and a rich extensibility mechanism for other factories to plug into this factory, the EFx Factory &lt;strong&gt;enables the layers of the service to be implemented by any technology&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;Furthermore, &lt;strong&gt;there are &lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;&lt;strong&gt;several layers in the architecture that can be extended&lt;/strong&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, primarily: Service Contract Implementation, Business Logic Strategy and Data Mapping Implementation. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/544666/original.aspx" atomicselection="true"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/544666/secondarythumb.aspx"&gt;&lt;/a&gt; &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;In each of these cases, &lt;strong&gt;a 3&lt;sup&gt;rd&lt;/sup&gt; party software factory specialising in a particular technology and architectural layer, can plug into the EFx Factory&lt;/strong&gt; and implement that layer. They do this in a number of ways: &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;&lt;/font&gt; &lt;ul&gt; &lt;li&gt;&lt;font color="#804000"&gt;Enhancing the technology-independent model views with &lt;/font&gt;&lt;font color="#804000"&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677135/original.aspx"&gt;technology specific implementation metadata&lt;/a&gt;&lt;/font&gt;&lt;font color="#804000"&gt;, commands and UI cues. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;Providing separate technology specific views when that technology addresses work products not present in technology-independent view, or when the technology is best presented in a different view from that provided by the factory. &lt;/font&gt; &lt;li&gt;&lt;font color="#804000"&gt;Providing technology specific implementation of the layer.&lt;/font&gt;&lt;/li&gt;&lt;/ul&gt; &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory, through technology separation and this extensibility mechanism, &lt;strong&gt;promotes 3&lt;sup&gt;rd&lt;/sup&gt; party domain experts to produce the authoritative abstractions and implementations&lt;/strong&gt; of specific technologies of these layers&amp;nbsp;for re-use. These implementations, themselves software factories, will then address and promote a standardised model of these layers. &lt;/font&gt;&lt;strong&gt;&lt;font color="#804000"&gt;This then promotes re-use of these&amp;nbsp;software factories&amp;nbsp;in other similar architectures of other software factories.&lt;/font&gt;&lt;/strong&gt;  &lt;h3&gt;Composability &amp;amp; Re-use&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;In Service Factory, the &lt;strong&gt;recipes to create the structure of a service are based upon a specific technology&lt;/strong&gt;. Because of the lack of a 'model' and separation between the service specification and the technology implementation of that service, the &lt;strong&gt;recipes are bound to a specific physical implementation which they create&lt;/strong&gt; – they assume certain source artefacts (CLR types)&amp;nbsp;in a certain structure. This &lt;strong&gt;makes the assets and recipes very hard to re-use in other factories with different physical implementations&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory &lt;strong&gt;separates the model of the service from the implementation of it&lt;/strong&gt;. The implementation is &lt;strong&gt;provided by 3&lt;sup&gt;rd&lt;/sup&gt; party factories based upon the logical architecture of a service layer&lt;/strong&gt;. When these 3&lt;sup&gt;rd&lt;/sup&gt; party factories create physical artefacts for the layer, (specific to their technology), they don’t populate the physical solution structure directly, since they have no coupling to or knowledge of that. Instead, &lt;strong&gt;they pass the artefacts to the factory, and the factory, through its physical&amp;lt;-&amp;gt;logical mapping determines which physical artefact container (solution folder, project) these artefacts will be assigned to&lt;/strong&gt;. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;Since the 3&lt;sup&gt;rd&lt;/sup&gt; party factories are only bound to a logical architecture, they &lt;strong&gt;can be re-used by other factories sharing the same logical architecture&lt;/strong&gt;. This means that other factories can be composed using these factories.&lt;/font&gt;  &lt;h3&gt;Availability &amp;amp; Support&lt;/h3&gt; &lt;p&gt;&lt;font color="#004080"&gt;&lt;a href="http://msdn2.microsoft.com/en-us/library/aa480534.aspx"&gt;Service Factory&lt;/a&gt;&lt;/font&gt;&lt;font color="#004080"&gt; is a &lt;strong&gt;freely available, released, documented, tested and supported deliverable from the patterns &amp;amp; practices&lt;/strong&gt; team. It will &lt;strong&gt;continue to evolve as the .NET platform and emerging software factory platform evolves&lt;/strong&gt;. This deliverable &lt;strong&gt;will continue to receive support from the patterns &amp;amp; practices team, and the development community as a whole&lt;/strong&gt;.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;EFx Factory is &lt;strong&gt;not finished and is not released to the general public&lt;/strong&gt;. It was prototyped internally at Microsoft, but has not received the necessary development, testing, documentation resources and support to move forward as a releasable deliverable.&lt;/font&gt;  &lt;h2&gt;Summary&lt;/h2&gt; &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory represents the first generation of software factories from Microsoft, which has made a significant step towards the creation and automation of web services.&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;The Service Factory is primarily focused upon the automation of web service implementations and patterns for specific technologies, using a wizard-based code generation process. &lt;/font&gt; &lt;p&gt;&lt;font color="#004080"&gt;Its' very valuable guidance assets provide the best patterns and guidance for implementing web services and managing their lifecycle and operation.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#004080"&gt;This factory is available and supported&amp;nbsp;publicly today, and is successfully being used by many of our customers in production to help them build web services more rapidly today.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory represents a prototype of a new generation of software factories within Microsoft, which has pioneered many of the concepts representative of future software factories from Microsoft tomorrow.&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;The EFx Factory is primarily focused upon logical architectural design, designer integration, automation, usability and architectural re-use and composability. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;It provides a managed automated environment that uses and leverages many abstractions, models and extensibility mechanisms&amp;nbsp;to present an end-to-end&amp;nbsp;logical architectural view of a product,&amp;nbsp;enhancing that with a rich design experience for&amp;nbsp;the&amp;nbsp;user. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;It has no dependence on technology. Instead, it&amp;nbsp;provides architectural-based technology-independent models that can be extended&amp;nbsp;by custom technology-specific providers, promoting re-use and innovation in the community.&amp;nbsp;&lt;/font&gt;  &lt;p&gt;&lt;font color="#804000"&gt;In turn, the core factory and the technology-specific providers can be re-used and packaged up to compose other factories to solve specific solution domains. &lt;/font&gt; &lt;p&gt;&lt;font color="#804000"&gt;This factory is not publicly available and remains an unfinished prototype.&lt;/font&gt;  &lt;h2&gt;Moving Forward&lt;/h2&gt; &lt;p&gt;Despite the significant advantages, and advancements that the EFx Factory offers in automating the assembly of service oriented client applications and services, Service Factory (and &lt;a href="http://www.codeplex.com/wiki/view.aspx?projectname=websf"&gt;Web Client Factory&lt;/a&gt;), because of their availability, support, resource investments&amp;nbsp;and ongoing development will remain the premier software factories available to Microsoft Enterprise partners and customers moving forward in this space.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1076364" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Web+Services+Software+Factory/default.aspx">Web Services Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FAQ - Isn't that MDA?</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/30/faq-isn-t-that-mda.aspx</link><pubDate>Thu, 30 Nov 2006 19:01:12 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1178601</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1178601.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1178601</wfw:commentRss><description>&lt;p&gt;Considering the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/EFxAGSftFtr.asp" mce_href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/EFxAGSftFtr.asp"&gt;EFx Factory&lt;/a&gt; and its core composability features with extensible technology-independent models, a few astute people soon get around to asking the following question:&lt;/p&gt; &lt;p&gt;&lt;strong&gt;Isn't the EFx Factory just another implementation of MDA?&lt;/strong&gt;&lt;/p&gt; &lt;h2&gt;Backgrounder&lt;/h2&gt; &lt;p&gt;&lt;a href="http://www.omg.org/mda/" mce_href="http://www.omg.org/mda/"&gt;Model Driven Architecture&lt;/a&gt;® (MDA) is a methodology created by &lt;a href="http://www.omg.org/" mce_href="http://www.omg.org"&gt;Object Management Group&lt;/a&gt; (OMG). Their definition of MDA can be found from their &lt;a href="http://www.omg.org/mda/faq_mda.htm" mce_href="http://www.omg.org/mda/faq_mda.htm"&gt;FAQ page&lt;/a&gt;. (excerpt below)&lt;/p&gt; &lt;blockquote&gt; &lt;p&gt;&lt;em&gt;"The MDA is a new way of developing applications and writing specifications, based on a platform-independent model (PIM) of the application or specification's business functionality and behavior. A complete MDA specification consists of a definitive platform-independent base model, plus one or more platform-specific models (PSM) and sets of interface definitions, each describing how the base model is implemented on a different middleware platform. A complete MDA application consists of a definitive PIM, plus one or more PSMs and complete implementations, one on each platform that the application developer decides to support."&lt;/em&gt;&lt;/p&gt;&lt;/blockquote&gt; &lt;p&gt;There is also a good wikipedia definition &lt;a href="http://en.wikipedia.org/wiki/Model-driven_architecture" mce_href="http://en.wikipedia.org/wiki/Model-driven_architecture"&gt;here&lt;/a&gt;, with more references to other sources.&lt;/p&gt; &lt;p&gt;The EFx factory defines architectural based models (such as &lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" mce_href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;the one here&lt;/a&gt;)&amp;nbsp;for parts of its product model. These are based upon common architectural implementation patterns (such as SOA contract patterns and the &lt;a href="http://msdn.microsoft.com/library/default.asp?url=/library/en-us/dnbda/html/distapp.asp"&gt;.NET distributed architecture&lt;/a&gt;). These models define views which are technology-independent abstractions of an underlying architectural framework that actually helps implement the products of the factory.&amp;nbsp;The underlying framework itself,&amp;nbsp;defines abstractions of the .NET framework class libraries and Enterprise Library.&lt;/p&gt; &lt;p&gt;The factory has been designed to define 'base models' of the internal architecture of applications and services -&amp;nbsp;called 'specifications' which have no dependency on a particular technology or implementation pattern. The technologies that are used to implement the specifications are provided by other software factories that are plugged into these base models to allow extended technology-specific models, abstractions, patterns, meta-data and artefact generation from other factories suited to this architecture. This means that the technology-independent models can be specialised towards a specific technology or technology strategy. This approach&amp;nbsp;prefers an extensible technology implementation to a prescriptive technology implementation. &lt;/p&gt; &lt;p&gt;In effect, the models and abstractions that the EFx Factory exposes, defines a technology agnostic model, where specific technology models&amp;nbsp;can be provided and overlayed by other 3rd party factories. This mechanism is outlined also in &lt;a href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/EFxAGSftFtr.asp" mce_href="http://msdn.microsoft.com/architecture/default.aspx?pull=/library/en-us/dnbda/html/EFxAGSftFtr.asp"&gt;this article&lt;/a&gt;.&lt;/p&gt; &lt;h2&gt;Answer&lt;/h2&gt; &lt;p&gt;&lt;strong&gt;The EFx Factory is not an instance of MDA.&lt;/strong&gt;&lt;/p&gt; &lt;p&gt;From the definition of MDA above, it might appear that in fact, the approach taken by the EFx Factory modelling strategy, would appear to be similar to that of MDA® - that could only be true if you equate a platform independent model (PIM) is the same as the approach as taken by EFx factory which is providing an extensible technology-independent model.&lt;/p&gt; &lt;p&gt;The truth of the matter is that the EFx Factory approach is in no way derived from an MDA approach, nor uses any processes, technologies nor standards that are defined by MDA, such as &lt;a href="http://en.wikipedia.org/wiki/Unified_Modeling_Language" mce_href="http://en.wikipedia.org/wiki/Unified_Modeling_Language"&gt;UML&lt;/a&gt;, &lt;a href="http://en.wikipedia.org/wiki/Meta-Object_Facility" mce_href="http://en.wikipedia.org/wiki/Meta-Object_Facility"&gt;MOF&lt;/a&gt; or &lt;a href="http://en.wikipedia.org/wiki/XMI" mce_href="http://en.wikipedia.org/wiki/XMI"&gt;XMI&lt;/a&gt;. &lt;/p&gt; &lt;p&gt;Using MDA as an approach in the context of software factories has several challenges that should be considered in any comparison between software factories and MDA. &lt;a href="http://blogs.msdn.com/jackgr" mce_href="http://blogs.msdn.com/jackgr"&gt;Jack&lt;/a&gt; outlines some of these in the FAQ section of his book &lt;a href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843" mce_href="http://www.amazon.com/Software-Factories-Assembling-Applications-Frameworks/dp/0471202843"&gt;'Software Factories'&lt;/a&gt;. However these issues are more related to MDA as an alternative approach to Software Factories as a whole, rather than a specific instance of a factory - which the EFx Factory is. &lt;/p&gt; &lt;p&gt;You might also want to read about the concerns around MDA &lt;a href="http://en.wikipedia.org/wiki/Model-driven_architecture#MDA_concerns"&gt;here&lt;/a&gt;&amp;nbsp;which appear to address some of the undelivered promises of MDA.&lt;/p&gt; &lt;h3&gt;Technology-Independent Models&lt;/h3&gt; &lt;p&gt;The EFx factory &lt;u&gt;does not&lt;/u&gt; provide a &lt;em&gt;platform &lt;/em&gt;independent model (PIM). Rather, it&amp;nbsp;&lt;u&gt;does&lt;/u&gt; provide extensible, domain specific &lt;em&gt;technology-independent &lt;/em&gt;models. I am not just splitting hairs here. The models define specific extensibility points based upon architecture, that can be addressed by other pluggable factories ('factorettes' in this context) that either provide a technology-specific implementation or provide strategies to implement them.&amp;nbsp;This is not the same as the platform independence described by MDA. &lt;/p&gt; &lt;p&gt;The plugged-in factorettes provide their own abstractions of a technology-specific view of the architecture that is exposed through an extensibility point. These extensibility points (&lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/11/19/variability-what-is-it-and-when-to-use-it.aspx"&gt;variability points&lt;/a&gt;) have been determined by identifying which parts of the architecture require specific technologies or implementation patterns. The factorettes&amp;nbsp;provide the abstractions, user experiences and implementation of that extensibility point. The abstractions provided by the factorettes are then integrated into the technology-independent base models to provide a technology-specific view of the architecture. That view can be either overlayed onto the technology-independent view, or displayed separately. It is then the combination of the views provided by the factory and the factorettes that provide the final user experience and actual implementation of the factory products.&lt;/p&gt; &lt;p&gt;Instead of MDA, you&amp;nbsp;might say that the EFx Factory subscribes to a &lt;a href="http://en.wikipedia.org/wiki/Model-driven_engineering" mce_href="http://en.wikipedia.org/wiki/Model-driven_engineering"&gt;Model Driven Engineering&lt;/a&gt; (MDE) approach - which would be more accurate. It's worth noting that the approach used by this factory has evolved from a grass roots approach of iterating automation and modelling of an established application framework use, which is more in line with what software factories promote.&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1178601" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>Multiple or Single Architectural Models/Views?</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/22/multiple-or-single-architectural-models.aspx</link><pubDate>Wed, 22 Nov 2006 14:30:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:1121913</guid><dc:creator>jezzsa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/1121913.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=1121913</wfw:commentRss><description>&lt;P&gt;This was to be a FAQ, but due to the fact that the practices around this are unproven yet, there is no definitive answer to this question, rather a discussion of approaches, issues, guidelines and raising general awareness.&lt;/P&gt;
&lt;P&gt;At the moment, there is quite a buzz about the correct usage of DSL's and modelling domains appropriately in the context of software factories.(within Microsoft at least, I would expect the rest of the DSM community have a more mature view on this).&lt;/P&gt;
&lt;P&gt;We are starting to see an emergence of software factories of different varieties. Much of this innovation is growing from an absence of a formal framework for building factories and mechanisms to stitch them together, with navigation etc.&amp;nbsp;(which may one day be available to us all). &lt;/P&gt;
&lt;P&gt;A lot of the innovation is being put into how to describe a whole domain with multiple models, and when and how to relate those DSL's together. Services and practices are starting to emerge such as the integration service introduced by &lt;A href="http://blogs.msdn.com/mauroregio" mce_href="http://blogs.msdn.com/mauroregio"&gt;Mauro&lt;/A&gt; and &lt;A href="http://clariusconsulting.net/blogs/vga" mce_href="http://clariusconsulting.net/blogs/vga"&gt;Victor&lt;/A&gt; in their article on &lt;A href="http://msdn2.microsoft.com/en-us/library/aa905334.aspx" mce_href="http://msdn2.microsoft.com/en-us/library/aa905334.aspx"&gt;Integration Scenarios&lt;/A&gt;&amp;nbsp;which allows you to reference elements from one model to another. Other factories, like the &lt;A href="http://www.ordinasoftwarefactory.nl/Default.asp/id,285/index.htm" mce_href="http://www.ordinasoftwarefactory.nl/Default.asp/id,285/index.htm"&gt;Ordina Factory&lt;/A&gt;, are using other techniques to achieve the same ends.&lt;/P&gt;
&lt;P&gt;There appear to be two extreme views on how to model any part of a domain (sub-domain). On the one hand, some folks are using very few (or single) models to cover the sub domains. Others are decomposing the sub-domain into very many models.&lt;/P&gt;
&lt;P&gt;Now, we need to be accurate here. There is a difference between the actual model and view (of the model). Ideally, you could have multiple models with multiple views, each view considers a whole model or part of a model. In some technologies a view can span multiple models also. Its the model that describes the logical architecture, and the view that provides the interface of that to the user. For the user, its the view that's important.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;[It should be noted at this stage, that multiple views for one model is currently not supported in the Microsoft DSL toolkit. Views to span multiple models is also not supported currently. Only one view per model is presently supported.]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;In the context of architectural guidance in a factory, imagine we are modelling a service, for example. Architecturally speaking, this is composed of several abstraction layers, and few deployment tiers. Lets consider the following standard &lt;A href="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif" mce_href="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif"&gt;.NET architecture for service orientation&lt;/A&gt; from patterns &amp;amp; practices. Since this is quite a popular architecture to create factories around at present.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif" target=_new mce_href="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif" atomicselection="true"&gt;&lt;IMG height=226 src="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif" width=240 mce_src="http://msdn.microsoft.com/library/en-us/dnpag2/html/wssf_landingpage_f01.gif"&gt;&lt;/A&gt; &lt;/P&gt;
&lt;P&gt;Considering the abstraction layers in the logical architecture, the objective is to decompose the architecture into layers, with differing concerns, all in the scope of the whole service. i.e. Service Interface, Business Layer, Resource Access layers and their component layers.&lt;/P&gt;
&lt;P&gt;Now undoubtedly each layer of the logical architecture is concerned with different aspects of the overall solution, and further, each layer has more than one concern to address, as well as the variability of that layer and its components. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The question is how best to apply DSL's to model these concerns and variability?&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;&lt;A href="http://blogs.msdn.com/jackgr" mce_href="http://blogs.msdn.com/jackgr"&gt;Jack&lt;/A&gt; addresses the same question is his article on &lt;A href="http://www.architecturejournal.net/2006/issue9/F1_Bare/" mce_href="http://www.architecturejournal.net/2006/issue9/F1_Bare/"&gt;bare naked languages&lt;/A&gt;.&lt;/P&gt;
&lt;P&gt;There are a number of patterns that address these kinds of architecture, and its typically these patterns that determine the answer to this question. &lt;/P&gt;
&lt;P&gt;However, I assert that basing your models and views upon these patterns alone, may not always be the best approach to exposing your DSL's to the users.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Multiple Models&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;To be a purest about separation of concerns, when analysing a problem domain, you would take the approach to define a single model for each layer which addressing a small number of concerns and the variability of that layer and its components. Or perhaps even, a model per concern!&lt;/P&gt;
&lt;P&gt;Ideally, you would present several different views (if possible) of the model perhaps each one exposing each one of the concerns, or maybe just one view for all the concerns (which is the case today with using the DSL toolkit). &lt;/P&gt;
&lt;P&gt;Then you would develop an appropriate mechanism to reference components from one model to another.&lt;/P&gt;
&lt;P&gt;For example, a separate model for each of the layers: &lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;A model for the &lt;STRONG&gt;Service Contract&lt;/STRONG&gt;, and &lt;STRONG&gt;Service Adapter&lt;/STRONG&gt;, 
&lt;LI&gt;A&amp;nbsp;model for the &lt;STRONG&gt;Business Logic&lt;/STRONG&gt; implementation 
&lt;LI&gt;Perhaps a separate model for the &lt;STRONG&gt;Business Entities&lt;/STRONG&gt; 
&lt;LI&gt;A model for the &lt;STRONG&gt;Data Access Logic&lt;/STRONG&gt; 
&lt;LI&gt;A model for the &lt;STRONG&gt;Service Agents&lt;/STRONG&gt;&lt;/LI&gt;&lt;/UL&gt;
&lt;P&gt;That's 6 models, but some could be combined. So in reality 4-6 models to cover the whole architecture.&lt;/P&gt;
&lt;P&gt;All models address the concerns and variability of their layer.&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Single Model&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;A&amp;nbsp;more natural (perhaps less purest) approach, would be to define a single model for all layers which addresses all the concerns and variability.&lt;/P&gt;
&lt;P&gt;This does not necessarily infer that appropriate emphasis has not been given to separation of concerns. It just means they are defined in the same model instead of separate models.&lt;/P&gt;
&lt;P&gt;Ideally, you would present several different views (if possible) of the model perhaps each one exposing each one of the concerns or aspect of variability, or maybe just one view for all the concerns and variability (which is the case today with using the DSL toolkit).&lt;/P&gt;
&lt;P&gt;For example, a single model for all layers. (example &lt;A href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx" mce_href="http://blogs.msdn.com/photos/jezzsa/images/677134/original.aspx"&gt;here&lt;/A&gt; from the EFx factory).&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Considerations&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;Considering these two approaches (in this context).&amp;nbsp;&lt;/P&gt;
&lt;P&gt;These approaches aim to achieve the following:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Multiple Models&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Maximum physical separation of concerns.&lt;/LI&gt;
&lt;LI&gt;Maximum physical de-coupling of the layers. &lt;/LI&gt;
&lt;LI&gt;Maximum flexibility in reuse of one model in another architecture.&lt;/LI&gt;
&lt;LI&gt;Facilitate better source control in team environments&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;As developers can work on different parts of the architecture in isolation from others. &lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Single Model&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Maximum holistic description of the architecture (big picture&amp;nbsp;view).&lt;/LI&gt;
&lt;LI&gt;Maximum usability.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;The challenges with these approaches (in this context):&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Multiple Models&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;No holistic view of the architecture. The inter-related pieces are presented in different views.&lt;/LI&gt;
&lt;LI&gt;The interface to reference dependencies in other views is usually poorly visualised/represented.&lt;/LI&gt;
&lt;LI&gt;Information to perform common user&amp;nbsp;tasks maybe spread throughout several files.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;&lt;STRONG&gt;Single Model&lt;/STRONG&gt;&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;Complexity of diagram can be high, if the abstraction of the model is low.&lt;/LI&gt;
&lt;LI&gt;Team development on same model can be challenging, as the view/model could be used by different roles addressing different aspects.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;[If you have any other pros and cons to add I be glad to add them.]&lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;U&gt;Learnings?&lt;/U&gt;&lt;/STRONG&gt;&lt;/P&gt;
&lt;P&gt;So what can we learn from this? I believe neither of these extreme approaches is ideal. The answer lies somewhere in-between - a compromise of both approaches.&lt;/P&gt;
&lt;P&gt;The emphasis of the views that you provide for your models, needs to be &lt;STRONG&gt;high usability&lt;/STRONG&gt;. A software factory is a &lt;U&gt;productivity tool&lt;/U&gt; for users that should not have to have the level of knowledge and experience that those building them have. So even though your model(s) employ the best architectural practices in separation of concerns, and pattern application&amp;nbsp;etc, these should not necessarily be forced upon the users. Instead, these patterns and architectural practices should be abstracted in the views, in a way, that makes it easy for the users to get the job done in describing the solution domain. (Its&amp;nbsp;the classic: Usability &amp;lt;-&amp;gt; Flexibility trade-off struggle)&lt;/P&gt;
&lt;P&gt;Perhaps building the models and the views are two different roles of defining a model for your domain?&lt;/P&gt;
&lt;P&gt;Here are some things to consider to make the modelling solutions (in a factory context) more usable:&lt;/P&gt;
&lt;UL&gt;
&lt;LI&gt;Use fewer models when the abstraction is high and variability is low. Use many more loosely coupled models when the abstraction is low and variability is high. &lt;/LI&gt;
&lt;LI&gt;For single models, use multiple instances of the model file to partition the solution into bite-sized chunks, and use cross-model references where applicable.&lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;This will assist in team development.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;For multiple models, provide holistic views of the other views that bring them together to form a composite 'zoomed out' view of how the models relate, so the user can get a feel of the whole picture rather than one aspect of it. &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;This will enable the users to stay focused on the objectives of the solution.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;For any approach, analyse which layers are more tightly bound to others, and require less flexibility in reality&amp;nbsp;- from the users perspective. &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;For example, in the above example, it is unlikely that the 'Resource Access Layer' is going to be used separately&amp;nbsp;from the 'Business Layer', but it is highly coupled to it architecturally speaking. So it would make sense from a usability perspective to combine these layers into a single view.&lt;/LI&gt;&lt;/UL&gt;
&lt;LI&gt;For any approach, use views that expose particular concerns or aspects of the architecture. &lt;/LI&gt;
&lt;UL&gt;
&lt;LI&gt;A good use of these views is by role, so for example, a security expert can view the cross-cutting concerns of authorization across the whole architecture, without having to understand all other aspects or abstractions of the architecture.&lt;/LI&gt;&lt;/UL&gt;&lt;/UL&gt;
&lt;P&gt;&lt;EM&gt;[Again, if you have any other&amp;nbsp;considerations to add, I be glad to add them here.]&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=1121913" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Guidance+Automation/default.aspx">Guidance Automation</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Domain+Modelling/default.aspx">Domain Modelling</category></item><item><title>FAQ - Round-Tripping</title><link>http://blogs.msdn.com/jezzsa/archive/2006/11/03/q-a-round-tripping.aspx</link><pubDate>Fri, 03 Nov 2006 20:39:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:943501</guid><dc:creator>jezzsa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/943501.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=943501</wfw:commentRss><description>&lt;P&gt;The first question I always get asked: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;&lt;EM&gt;Do you support&amp;nbsp;round-tripping of the generated code your factory creates&lt;/EM&gt;?&lt;/STRONG&gt; In other words, do you support a developer going into the generated code, modifying it in an arbitrary way, and then read back those code changes and their intended meanings into the models used by the factory? &lt;/P&gt;
&lt;P&gt;[Quite often the asking party has the handy &lt;A href="http://msdn.microsoft.com/msdnmag/issues/04/07/Whitehorse/fig08.gif" mce_href="http://msdn.microsoft.com/msdnmag/issues/04/07/Whitehorse/fig08.gif"&gt;Class Diagram&lt;/A&gt; functionality of Visual Studio in mind when they ask this.]&lt;/P&gt;
&lt;H2&gt;Backgrounder&lt;/H2&gt;
&lt;P&gt;It works like this for our particular factory (the EFx Factory): &lt;/P&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;The factory user designs the logical components of the applications and services in architectural layers using a logical model explorer and visual designers. Each component is part of an overall (combined) meta-model that has a set of metadata (properties) associated to the elements in it. This metadata defines things like the naming, structure and concerns of the component within the architectural layer and ultimately governs how that component should be implemented. &lt;A href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx" mce_href="http://blogs.msdn.com/photos/jezzsa/images/544743/original.aspx"&gt;This diagram&lt;/A&gt; shows one of the designers used in this process.&lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;BLOCKQUOTE&gt;
&lt;P&gt;Of course, these metadata 'properties' provide an abstraction to the actual generated solution artefacts and it is defined in architectural terms, since we don't want the factory users to have to be expert C#&amp;nbsp;solution domain experts to use the models. That's on of the powers of using abstraction your factory. &lt;/P&gt;&lt;/BLOCKQUOTE&gt;
&lt;P&gt;&lt;EM&gt;[As a side note: In this factory, we do allow and support&amp;nbsp;(even facilitate) the developers hand-crafting the business logic in source code, since we don't feel we can sufficiently model business logic successfully or completely for all cases to suit all solutions.&amp;nbsp;The hand-crafted&amp;nbsp;custom source code is referenced by the models and maintained separately from the generated code, so won't be considered as part of this discussion.] &lt;/EM&gt;&lt;/P&gt;
&lt;P&gt;At any given point in the design time of the logical models, assuming certain constraints and certain validation rules are satisfied, source code and other artefacts are generated from the model and designated to the appropriate container (project or solution folder) in the physical solution. It is then subsequently compiled into assemblies at a later stage. &lt;/P&gt;
&lt;H2&gt;Answer&lt;/H2&gt;
&lt;P&gt;The answer for this factory is: &lt;STRONG&gt;&lt;EM&gt;No&lt;/EM&gt;&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;We are not saying it can't be done; just saying that the considerable effort required to support this is wasted when: &lt;/P&gt;
&lt;OL&gt;
&lt;LI&gt;&lt;STRONG&gt;The Model is King.&lt;/STRONG&gt; The model is intended to represent the architecture, its components and the architectural patterns it implements. In this factory, all the components (with business logic components being the exception) are modelled in the architecture and configurable to suit certain identified variability. This 'specification' is meant to define the specification of the solution, not the source code it generates. Since those interested in the abstractions it provides will not necessarily be interested (or skilled in reading) low level source code. The model is king, and the authority on the actual state of the factory product. All analysis and generation tools read and write to these models. 
&lt;LI&gt;&lt;STRONG&gt;Abstraction assumed to be high&lt;/STRONG&gt;: In this factory, the generated solution artefacts that represent the physical incantation of the models is provided by pluggable providers (we call them '&lt;EM&gt;Artefact Generators'&lt;/EM&gt; for obvious reasons). These providers are intended to implement a pattern or technology to satisfy a set of concerns for a set of components at a particular layer of the architecture. For example, we would have one such provider for a service to implement the Service Contract and Data Contracts using a given technology, say - WCF. Now these providers themselves may be mini-factories ('&lt;A href="http://en.wikipedia.org/wiki/Factorette" mce_href="http://en.wikipedia.org/wiki/Factorette"&gt;factorettes&lt;/A&gt;' as we call them) with their own abstractions that remove the requirements for the factory user to be experts in implementing &lt;EM&gt;their&lt;/EM&gt; best practices or patterns in specific technology terminology or using a low level tool – like source code. The providers are expected to hide that complexity, and only expose a simple interface to configure it, in generally understandable terms and patterns. So, the abstractions they provide may not be as simple as perhaps the Class Designer in Visual Studio (which could be said to have little to no abstraction). 
&lt;LI&gt;&lt;STRONG&gt;One-way mapping assumed&lt;/STRONG&gt;. In following with the previous point, but more importantly, since the providers are to implement a technology based upon a meta-model of components and metadata in a well defined architectural model, they are encouraged to provide more than one set of patterns for their technology which vary and are each optimized depending on the configuration of that meta-model. You can imagine this being the same way that source code compilers implement different byte code sequences depending on how the developer wrote their source code. One pattern may not be most optimal for all configurations. So how do you determine from the modified source code which pattern is in use, and how that change in source code should be reflected in the model? It's the same problem most people see when reverse engineering assemblies using a reflector. You never get back the original source code with its abstractions in place – because there is a one to many mapping between source code and compiled code. &lt;/LI&gt;&lt;/OL&gt;
&lt;P&gt;The next point is (philosophical)? &lt;/P&gt;
&lt;P&gt;This factory does not want to promote source code development, favouring more powerful abstractions, visual modelling and extensibility (except, as we mentioned above, for the business logic – which we &lt;EM&gt;do&lt;/EM&gt; want the factory users to define in source code). So, we don't expect the developers to tweak the generated source code.&lt;/P&gt;
&lt;P&gt;Having said that, there are legitimate reasons they might want to do this - customization. The assumption here is that; in modifying the generated source code your intention is to define a variability point (or configuration of a variability point) that the factory does not cater for currently. In these cases, this deliberate action is interpreted as a case for further factory customization – which is a valid reason to create a variant of the factory to accommodate this variability. Its part of the natural development cycle of a factory.&lt;/P&gt;
&lt;P&gt;Just as an interesting point of strategy to identify these cases, this factory employs a validation rule that checks the last generated source code artefacts for modifications, before re-generation. Then, if any modifications are found, the generation process is halted and the factory user is notified of the change. In those cases the modification needs to be resolved with an appropriate manual action by the factory user in order for generation to continue. &lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=943501" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Factory+FAQ/default.aspx">Factory FAQ</category></item><item><title>FPM - Case Study Part 2</title><link>http://blogs.msdn.com/jezzsa/archive/2006/08/22/fpm-case-study-part-2.aspx</link><pubDate>Tue, 22 Aug 2006 14:00:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:712426</guid><dc:creator>jezzsa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/712426.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=712426</wfw:commentRss><description>&lt;P&gt;Edward and myself have made some major headway on exploring and validating some experimental tooling for the authoring factories with the&amp;nbsp;&lt;A href="http://blogs.msdn.com/jezzsa/archive/2006/08/01/688197.aspx" mce_href="http://blogs.msdn.com/jezzsa/archive/2006/08/01/688197.aspx"&gt;'Factory Product Model&lt;/A&gt;'&amp;nbsp;using the p&amp;amp;p Service Factory as a test case. &lt;/P&gt;
&lt;P&gt;This work is based upon learnings harvested from authoring the EFX factory itself, and generalising those, and the design, into reusable tools that can be used by others to author their own factories. &lt;/P&gt;
&lt;P&gt;The p&amp;amp;p Service Factory is subject of the current experiment at present. &lt;/P&gt;
&lt;P&gt;Despite the fact that it was not designed&amp;nbsp;with this product oriented approach in mind, it is nonetheless turning out to present no significant issues&amp;nbsp;from what we are concluding at present. We are able to use the logical concepts that were originally used to describe the work products of this factory, and we have been able to define a model of the factory product, that could be used to generate the factory schema, solution templates, artefacts&amp;nbsp;and runtime and tooling for navigating it.&lt;/P&gt;
&lt;P&gt;Edward has been instrumental in this work, and has posted the second part: &lt;A href="http://www.edwardbakker.nl/PermaLink,guid,43c698f2-332e-4a2f-a8c9-e3c5662bb441.aspx" mce_href="http://www.edwardbakker.nl/PermaLink,guid,43c698f2-332e-4a2f-a8c9-e3c5662bb441.aspx"&gt;Factory Product Model, Case Study - The Service Factory Part 2&lt;/A&gt;&amp;nbsp;in this series. Have a look there for a first peek at the progress.&lt;/P&gt;
&lt;P&gt;We will soon be posting more details about how the FPM designer has developed, and how it is used to define the factory product model. Then how the factory author would define their product model from the logical work products that the factory creates. Then we look at the configuration they define for these Work Products that enabless the designer to generate the assets, work products and schema of the factory.&lt;/P&gt;
&lt;P&gt;In the next article, I'll explain how the FPM designer works&amp;nbsp;in more detail, and how that is then used to generate the runtime factory tooling used by the factory user to manipulate their instance of the factory product.&lt;/P&gt;
&lt;P&gt;&lt;EM&gt;&lt;STRONG&gt;[I have to mention here, that this work is experimental and does not necessarily reflect the actual approaches that may be taken in the future Software Factories tooling in Visual Studio.]&lt;/STRONG&gt;&lt;/EM&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=712426" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>The 'Meta-Model' and its relationship to the 'Factory Schema'</title><link>http://blogs.msdn.com/jezzsa/archive/2006/08/01/the-meta-model-and-its-relationship-to-the-factory-schema.aspx</link><pubDate>Tue, 01 Aug 2006 06:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:688197</guid><dc:creator>jezzsa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/688197.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=688197</wfw:commentRss><description>&lt;p&gt;In the previous article, I talked about the power of the factory meta-model, and why you should have one in your factory. In this article, I want to describe how the meta-model is related to the factory schema, and how that can benefit both the factory author - defining her factory, and the factory user - operating his factory.
&lt;/p&gt;&lt;p&gt;So what is this meta-model, and how is that related to the factory schema?
&lt;/p&gt;&lt;p&gt;A software factory creates, or outputs a software &lt;strong&gt;'Product'&lt;/strong&gt;. The 'product of the factory' represents the solution domain of the problem the factory is trying to solve. The meta-model is a model of the factory product.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Defining the Product of your Factory&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;In order to achieve high levels of applicability, usability, productivity and efficiency, the factory can only address a finite set of the variability of the problem domain, and through careful application of constraints and relevant architectural design patterns - define an FPM to model the product line architecture that addresses this problem domain. The product model therefore, provides a relevant abstraction of the solution domain, which can then be used to define the factory viewpoints, assets, using automation.
&lt;/p&gt;&lt;p&gt;The factory should be able to offer the most optimal technology/pattern to implement the product for the specified problem by baking-in the experience of the factory/tool builder gained from their experience of repeatedly solving these types of problems in the solution domain. This means, that if the factory changes its configuration, the factory may choose to use a different technology or pattern to solve the problem. (kind of the same principals a language compiler uses).
&lt;/p&gt;&lt;p&gt;In order for the factory to adapt effectively to change in problem specifications, and adapt to changes in evolving solution requirements, the factory must maintain and persist a schema of the product that can be configured/re-configured at any time by the factory author to regenerate the assets for the factory. In turn, these assets re-generate a new solution efficiently and predictably for the factory user.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Starting with the 'Factory Product Model'&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;In order to do this, the factory runtime environment needs a 'logical model' of the product it creates - a 'meta-model', or more specifically a '&lt;strong&gt;Factory Product Model'&lt;/strong&gt; (FPM). (see previous article on the &lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/07/31/684404.aspx"&gt;Factory Meta-Model&lt;/a&gt;)
&lt;/p&gt;&lt;p&gt;This FPM, is used by the factory author to design the architecture of the software product the factory produces, in common terms to be understood by the factory user familiar with the problem domain.&lt;br/&gt;We must try not to pollute this model with details about the physical implementation of the solution domain, instead choosing an appropriate abstraction of that. The factory user should not be assumed (by the factory author) to be an expert in solution implementation using the various specific technologies or patterns of the solution. Instead the FPM should describe the architecture of the product, in general solution domain concepts, easily understood by the factory user. Correctly done, this is one way to achieve useful abstraction using the factory.
&lt;/p&gt;&lt;p&gt;The FPM describes the things the factory will configure and produce - the 'work product types' - and their relationship to the product of the factory. Furthermore, this FPM describes the hierarchical relationship of these work product types and how they are composed of other work product types, ultimately resulting in the product. In essence the FPM describes the logical composition of the factory product, devoid of the physical implementation and physical structure of the solution. More precisely, the FPM describes the &lt;strong&gt;'Product Line Architecture'&lt;/strong&gt; of the factory.
&lt;/p&gt;&lt;p&gt;You can see below an example of a DSL designer that a factory author could use to define an FPM for their factory. This designer could equally be implemented in a hierarchical tree view type control.
&lt;/p&gt;&lt;p&gt;This particular diagram shows the FPM for the EFx Factory as an example. In this case, the product created by the EFx Factory can be either an Application or Service or a System (composed of Applications and Services). Each Application or Service is itself a Module that can contain one or more Subsystems, and each type of Module (Application or Service) implements its own specialisation of a Subsystem.
&lt;/p&gt;&lt;p&gt;From the toolbox in the designer below, you can define the product line architecture in very simple terms. The Product, a variant of the product (in the product line), Work products used to describe the logical components of the product, and relationships to represent inheritance and composition.
&lt;/p&gt;&lt;p&gt;&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/684385/original.aspx"&gt;&lt;img src="http://blogs.msdn.com/photos/jezzsa/images/684385/409x375.aspx" alt="" border="0" height="375" width="409"/&gt;&lt;/a&gt;
	&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Figure 2.&lt;/strong&gt; Illustrates the top level &lt;strong&gt;'Factory Product Model'&lt;/strong&gt; design for the EFx factory.
&lt;/p&gt;&lt;p&gt;The entire logical model of all the factory (all work product types) are represented in this diagram but not fully described in this diagram. Each Work Product will be assigned an asset to build them. Some of the work product types are better described by other separate models (DSLs). The FPM designer has a shape called a 'Model Concept' (green shape) which denotes that a work product type is described in separate model (DSL), which may offer more detailed work product types (white shapes) and relationships for that specific domain. For clarity, we could call each of these model files a &lt;strong&gt;'Work Product Type Model' (WPM)&lt;/strong&gt;. These WPM models will ultimately be implemented as a single model file (DSLs) in the factory solution.
&lt;/p&gt;&lt;p&gt;The other 'Work Product' shapes (yellow shapes) and 'Product Variant' shapes (brown shapes) in the diagram represent work product types that will ultimately realise themselves, physically, as either a solution, solution folders, projects or individual project files artefacts.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;[A Work Product is physically realised as an Artefact. That may be a single artefact (e.g. source file). It may be artefacts in multiple files. Many parts of a single file, or multiple files (e.g. a partial class definition spread across one or many files). Maybe it's no physical artefact at all or maybe its configuration on a remote server somewhere.&lt;/em&gt;&lt;/strong&gt;
		&lt;strong&gt;&lt;em&gt;Not all factories create source code.]&lt;/em&gt;&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;Therefore the entire FPM of the factory can be visualised in one file, and implemented across several model files: Product Model + Work Product Type Model(s).
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;[Note. This is not the view the factory user will see. Instead the factory user will be provided a 'view' over this FPM similar to the one&lt;/em&gt;&lt;/strong&gt;
		&lt;a href="http://blogs.msdn.com/photos/jezzsa/images/677149/original.aspx"&gt;&lt;span style="color:blue; text-decoration:underline"&gt;&lt;strong&gt;&lt;em&gt;here&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;&lt;strong&gt;&lt;em&gt;, where they can create and configure the 'instances' of the work products of their instance of the factory. This is called the 'Product Explorer']&lt;/em&gt;&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;&lt;strong&gt;The Factory Schema&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;The FPM provides is powerful authoring experience for the factory author to define the product. A powerful user experience for the factory user creating an instance of the product.
&lt;/p&gt;&lt;p&gt;The FPM (as a whole) provides a view across all the &lt;strong&gt;Work Products&lt;/strong&gt; types, their &lt;strong&gt;Assets&lt;/strong&gt; and mapping to the &lt;strong&gt;Artefacts&lt;/strong&gt; from the factory schema. You can think of the FPM as a view of the factory you are building - a &lt;strong&gt;ViewPoint&lt;/strong&gt; of the tool that lets you build your factory (that tool is the &lt;strong&gt;'Factory-Factory'&lt;/strong&gt; which you use to author your factory).
&lt;/p&gt;&lt;p&gt;In fact, if ever there was a &lt;strong&gt;'Factory-Factory-Factory'&lt;/strong&gt; built (i.e. a factory that defined the schema for factory building :) ), that would contain a &lt;strong&gt;ViewPoint&lt;/strong&gt; called a 'Factory Product Design'. This viewpoint would be defined as the following:
&lt;/p&gt;&lt;ul&gt;&lt;li&gt;The &lt;strong&gt;WorkProduct&lt;/strong&gt; would be the 'Factory Product Model'
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;Asset&lt;/strong&gt; would be the FPM Designer
&lt;/li&gt;&lt;li&gt;The &lt;strong&gt;Artefact&lt;/strong&gt; would be the FPM Designer DSL file - MyFactoryProduct.fpm (in our case)
&lt;/li&gt;&lt;/ul&gt;&lt;p&gt;The FPM becomes a logical starting point for the factory author to begin to describe and their work products of the factory schema and their artefacts and assets needed to do that. It is simply one of the views of the factory schema. There will be others too that view the schema from different authoring aspects.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;Generating the Factory Runtime&lt;/strong&gt;
	&lt;/p&gt;&lt;p&gt;Since the FPM describes the work products and their assets, it can be used to generate runtime user tooling such as the views required to view the product (the 'Product Explorer') and launch the assets to create the WorkProducts. This tooling would then be used by the factory user to 'operate' the factory and manipulate the factory product. This tooling is then packaged and installed with the factory into the factory user's IDE. The factory user can then explore parts of FPM (and schema) visually in a number of different tool windows (views) and assemble the factory product, using the associated assets (templates, recipes, models) for the work products from these views.
&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;[I'd like to specially thank&lt;/em&gt;&lt;/strong&gt;
		&lt;a href="http://blog.arrowrock.com/sourceart/"&gt;&lt;span style="color:blue; text-decoration:underline"&gt;&lt;strong&gt;&lt;em&gt;Martin Danner&lt;/em&gt;&lt;/strong&gt;&lt;/span&gt;&lt;/a&gt;
		&lt;strong&gt;&lt;em&gt;for providing valuable feedback to this article that expressed some of the points here more clearly and concisely. And to be fair, a lesson in concise, precise articulation. You can expect to hear more from Martin in the near future on factories.]&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=688197" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>The Factory 'Meta-Model'</title><link>http://blogs.msdn.com/jezzsa/archive/2006/07/31/the-factory-meta-model.aspx</link><pubDate>Mon, 31 Jul 2006 22:31:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:684404</guid><dc:creator>jezzsa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/684404.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=684404</wfw:commentRss><description>&lt;P&gt;Hopefully in previous posts I have been able to help de-mystify what exactly the factory schema is and how you should be thinking about it. If you are still confused about how to build a factory and how to create the factory schema, you are not alone. &lt;/P&gt;
&lt;P&gt;My good friend&amp;nbsp;&lt;A href="http://www.edwardbakker.nl/" mce_href="http://www.edwardbakker.nl/"&gt;Ed Bakker&lt;/A&gt; and I have been working together towards improving the user experience of factories, primarily for the factory user, and also for the factory author. He has just posted&amp;nbsp;on some of&amp;nbsp;his own thoughts in this area (&lt;A href="http://www.edwardbakker.nl/PermaLink,guid,f672ac1b-3cb1-4853-8dfe-6c6a9fcf673f.aspx" mce_href="http://www.edwardbakker.nl/PermaLink,guid,f672ac1b-3cb1-4853-8dfe-6c6a9fcf673f.aspx"&gt;Software Factories - The Next Generation&lt;/A&gt;). &lt;/P&gt;
&lt;P&gt;I wanted to expand on some of those thoughts here from a different angle, in a couple of articles and focus a little more&amp;nbsp;on the schema and meta-model of a factory and how they are related, the EFx factory has a bit of a head start on most of the emerging factories at the moment. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Solution-based Approach&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;The first software factories on the market right now like the 'Service Factory' (from patterns &amp;amp; practices team) do not define or provide or use a factory schema, nor offer help on what one should look like, or how it works. They do not provide a 'model' per-se of the problem domain of building a service as a 'product' of the factory, and therefore they don't require the need for a factory schema. &lt;/P&gt;
&lt;P&gt;Instead, the approach it uses is to define sets of losely related GAT recipes to create the physical components of a service by directly generating the source artefacts right into the solution. &lt;BR&gt;These recipes are expected to be executed, by the factory user, in the right order, on the right physical solution elements, then somehow the user is expected to know what was created and further more go back into the physical artefacts, manually, and edit them (using code snippets and other recipes). It's a job for a skilled expoerienced developer who has detailed knowledge about the how the factory works, and deep knowledge of the solution domain as well.&lt;BR&gt;It is the output of the recipes (source code) that maintains&amp;nbsp;the *state* of the service being defined, and therefore it is difficult to re-configure the state of the service with automated tools. So to be clear, there is a 'solution&amp;nbsp;model' maintained in the source code. But there is no provision for reverse engineering the 'solution model' source back to a logical 'problem model', that can be modified and re-generated easily by the factory user. &lt;/P&gt;
&lt;P&gt;This class of factory is able, to describe the work products (physical artefacts) of the factory, and the assets that create them (tools, recipes etc), but they offer little formal schema of the factory or visualisation of that schema, and rely upon written guidance as a means to relate one work product to another. &lt;BR&gt;In other words, there is no 'problem model' of the product of the factory.&amp;nbsp;There&amp;nbsp;is a 'solution model' persisted in the physical solution structure and its artefacts, and the factory user is expected to be very familiar and concerned with the physical model. This design thererfore only offers very little abstraction of the problem space. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;A Different Approach&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;An approach which is more in-line with factories of the future, and one the EFx factory took to the same problem domain, is to use a model driven approach to model the service and its variability points&amp;nbsp;from end-to-end. This therefore, offers an abstraction of the problem domain to the factory user. The advantages of this approach are numerous: &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;The Problem Model&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;The EFx factory employs a runtime model (a Meta-Model) of the 'product' and its' work products that the factory produces, as well as the architectural relationships between them. &lt;/P&gt;
&lt;P&gt;The factory is then able to display a logical 'view' of the things (work products) it produces (a product model) in a hierarchy that describes how they are composed and related, offering implicit guidance on how to construct and compose them. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Separating the Implementation from the Configuration&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;In addition, the EFx factory offers an extensible plug-in mechanism for 'Artefact Generators' which are used to generate the source artefacts that are represented by&amp;nbsp;the model (once the model has been configured). &lt;/P&gt;
&lt;P&gt;The model describes the architectural make up of the service and the relationship of the components within, not the technology implementation of it. &lt;/P&gt;
&lt;P&gt;Technology implementation is cleanly separated by this design, and only applied (postponed) till when the factory user is ready to select a technology based upon changing requirements of the solution.&amp;nbsp; &lt;/P&gt;
&lt;P&gt;It is these 'Artefact Generators' (seperate specialised pluggable packages)&amp;nbsp;that determine how best to write the source artefacts based upon the current configuration of the model, and in all but the rarest cases, these artefascts will require no further editing by the factory user. In fact, in this design the factory user, performs little if any coding. The coding know-how of the solution domain is encoded into the 'Artefact Generator' itself. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Seperating the Logical from the Physical&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;Further advantages of this approach are: &lt;/P&gt;
&lt;P&gt;The factory user no longer needs to be concerned about working with, or configuring, the physical artefacts the factory (artefacts generators) produce, nor modifying them. &lt;/P&gt;
&lt;P&gt;The factory maintains a logical model of the product and its work products, and this logical model maintains a runtime mapping to the physical structure of the solution. The factory is able to determine where the generated artefacts are placed in the physical structure. &lt;/P&gt;
&lt;P&gt;The factory can do this because it attributes meta-data properties from the model to the physical solution structure containers (Solution Folders, Projects, Files), designating them as a specific work products in the product model. &lt;/P&gt;
&lt;P&gt;Therefore, since the this product model provides a seperation and mapping to the physical artefacts that are produced, so the solution structure can be independently manipulated (re-structured) to define a suitable physical deployment model of the product, rather than attempting to describing the logical structure of it. The advantage of this is clear. &lt;/P&gt;
&lt;P&gt;The mixture of these two concerns&amp;nbsp;(logical structure vs. deployment structure) often leads to poorly named and structured solutions, and much debate on what physical structure to use per solution/project/developer. Now, you can address correctly the concern of the deployment structure of the solution -&amp;nbsp;independently from the logical structure of the problem. &lt;/P&gt;
&lt;P&gt;You can see the relationship of the&amp;nbsp;Logical View and the Physical View of the product of the factory in the picture below. &lt;/P&gt;
&lt;P mce_keep="true"&gt;&lt;A href="http://blogs.msdn.com/photos/jezzsa/images/677147/original.aspx"&gt;&lt;IMG style="WIDTH: 424px; HEIGHT: 375px" height=375 src="http://blogs.msdn.com/photos/jezzsa/images/677147/424x375.aspx" width=424 mce_src="http://blogs.msdn.com/photos/jezzsa/images/677147/424x375.aspx"&gt;&lt;/A&gt;&lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Figure 1.&lt;/STRONG&gt; Illustrates the 'EFx Solution Explorer' logical view of the solution, and its relationship to the physical structure of the solution in 'Solution Explorer', and meta-data attributed to the work products of the factory. &lt;/P&gt;
&lt;P&gt;&lt;STRONG&gt;Architectural Correctness and Guidance in Context&lt;/STRONG&gt; &lt;/P&gt;
&lt;P&gt;The fact that the service has been modelled from end-to-end and the variability of the problem domain is configurable in a persisted model -&amp;nbsp;offers additional advantages: &lt;/P&gt;
&lt;P&gt;The model already describes the relationship between the logical concepts of the architecture, and therefore can validate them at an appropriate time in context with each other, preventing invalid architectures and illegal configuration of the work products. &lt;/P&gt;
&lt;P&gt;The user is no longer expected to know how to compose a single work product (with a set of related recipes), since the model describes and maintains the configuration of the work product. The selected specialised 'Artefact Generators' determine the correct and most efficient means to construct it, and create the physical representation of it. &lt;/P&gt;
&lt;P&gt;The work products can be re-generated over and over again by re-configuring the model, producing reliably, highly predictable and architecturally correct artefacts every time. &lt;/P&gt;
&lt;P&gt;For more details on the other features of this factory and their advantages see the &lt;A href="http://blogs.msdn.com/jezzsa/articles/677177.aspx" mce_href="http://blogs.msdn.com/jezzsa/articles/677177.aspx"&gt;EFx Architectural Guidance Software Factory article&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=684404" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Web+Services+Software+Factory/default.aspx">Web Services Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>The EFx Architectural Guidance Software Factory - Recently Published Article</title><link>http://blogs.msdn.com/jezzsa/archive/2006/07/25/The-EFx-Architectural-Guidance-Software-Factory-_2D00_-Recently-Published-Article.aspx</link><pubDate>Tue, 25 Jul 2006 23:35:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:678196</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/678196.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=678196</wfw:commentRss><description>&lt;P&gt;Just a link to the article, as it does'nt appear in the blog roll: &lt;A href="http://blogs.msdn.com/jezzsa/articles/677177.aspx"&gt;http://blogs.msdn.com/jezzsa/articles/677177.aspx&lt;/A&gt;&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=678196" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Enterprise+Framework/default.aspx">Enterprise Framework</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>The Web Service Software Factory (Service BAT)</title><link>http://blogs.msdn.com/jezzsa/archive/2006/04/09/the-web-service-software-factory-service-bat.aspx</link><pubDate>Sun, 09 Apr 2006 20:41:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:571990</guid><dc:creator>jezzsa</dc:creator><slash:comments>2</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/571990.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=571990</wfw:commentRss><description>&lt;P&gt;Very recently p&amp;amp;p announced the 'Web Service Software Factory' (formerly the 'Service BAT') to the public community (&lt;A href="http://blogs.msdn.com/thehoggblog/archive/2006/04/05/569610.aspx" mce_href="http://blogs.msdn.com/thehoggblog/archive/2006/04/05/569610.aspx"&gt;official announcement here&lt;/A&gt;). The name is still not nailed down yet, but its drawing in close.&lt;/P&gt;
&lt;P&gt;A number of us in the community have been busy helping the p&amp;amp;p team refine the requirements and design of this guidance package and basically representing you guys - the community, in shaping this offering. The outcome of this project is set to be an exciting offering from p&amp;amp;p and a god send for developers building services today.&lt;/P&gt;
&lt;P&gt;At present the offering is in its infancy, but rapidly progressing. We are all hoping that when finally released this package will provide a huge step towards proving a factory for our development community that exubes automation, guidance, patterns and tools to speed the construction of services.&lt;/P&gt;
&lt;P&gt;It's quite an interesting position to be in with both authoring the EFx Factory and advising on the p&amp;amp;p 'Service Factory' project, since they both share the same overall vision. However, they do differ somewhat in their scope, approaches and end goals. The EFx Factory has been a gradual evolution from its beginnings as an application framework on .Net 1.0, into a automation toolkit and now a software factory on .Net 2.0. EFx provides more of a model driven approach to constructing Service Oriented applications and services. It is geared towards providing more architectural guidance, abstractions of the solution and separation between design and technology implementation and is based upon creating components on top of an application framework, (itself based upon Enterprise Library).&lt;/P&gt;
&lt;P&gt;It is yet to be seen what future direction the 'Service Factory' will take, which will be further influenced by the wider development community now. However, the EFx Factory has been useful in providing an alternative viewpoint to the problem space overall, and although not directly used in the development of the 'Service Factory' offering, EFx remains as an influencer in its further development.&lt;/P&gt;
&lt;P&gt;There are a number of key influencer's in this project (&lt;A href="http://blogs.msdn.com/thehoggblog/archive/2006/04/05/569610.aspx" mce_href="http://blogs.msdn.com/thehoggblog/archive/2006/04/05/569610.aspx"&gt;Jason names a few here&lt;/A&gt;), that provide various key parts that the toolkit covers, and these guys are all providing valuable input into the project - so check out what they have to say.&lt;/P&gt;
&lt;P&gt;&lt;A href="http://www.edwardbakker.nl/" mce_href="http://www.edwardbakker.nl"&gt;Edward&lt;/A&gt; currently owns the web space on the details of the &lt;A href="http://www.edwardbakker.nl/PermaLink,guid,1c610c51-8d58-411f-a874-f6342c3db22e.aspx" mce_href="http://www.edwardbakker.nl/PermaLink,guid,1c610c51-8d58-411f-a874-f6342c3db22e.aspx"&gt;'Service Factory'&lt;/A&gt; at the moment, and is going to provide many more details in the future. So no point me repeating them for you - hook into &lt;A href="http://www.edwardbakker.nl/" mce_href="http://www.edwardbakker.nl/"&gt;his blog&lt;/A&gt;.&lt;/P&gt;&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=571990" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Web+Services+Software+Factory/default.aspx">Web Services Software Factory</category><category domain="http://blogs.msdn.com/jezzsa/archive/tags/Software+Factories/default.aspx">Software Factories</category></item><item><title>The EFx Software Factory</title><link>http://blogs.msdn.com/jezzsa/archive/2006/03/06/the-efx-software-factory.aspx</link><pubDate>Mon, 06 Mar 2006 21:44:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:544740</guid><dc:creator>jezzsa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/544740.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=544740</wfw:commentRss><description>
&lt;p&gt;Its been a while since I talked about progress on EFx and its factory.&lt;/p&gt;
&lt;p&gt;We have got to a point now where we can start to demonstrate the factory and how it operates. We still have some way to go to complete the implementation of the finer details, but a picture speaks a thousand words, so I am now in a position to show you some of what it looks like currently.&lt;/p&gt;
&lt;p&gt;(I am gonna do this in several articles, so we are just gonna start with the big picture stuff first)&lt;/p&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;Factory Background&lt;br/&gt;&lt;/strong&gt;&lt;/span&gt; (Thanks to &lt;a href="http://www.edwardbakker.nl/"&gt;Edward&lt;/a&gt; for reminding to put his section in here - duh!)&lt;/p&gt;
&lt;p&gt;If you have been following the articles on EFx earlier on here you'll know that EFx is an Application Framework for building enterprise distributed applications and services. In actual fact, like most frameworks, EFx helps builds 'baseline' implementations. That means it provides all the frame-working code and the common stuff developers need to build a real implementation. EFx has been successful in helping provide the architectural structure and class libraries to enable rapid and predictable development of these types of applications and services. One of the advantages of this framework is that it leverages Enterprise Library under-the-covers to provide access to common service providers and application blocks. EFx also provides a number of extensions to Ent.Lib to 'round out' the functionality it provides.&lt;/p&gt;
&lt;p&gt;So, one of the major issues with EFx (as with any other framework) from the practitioners point of view, is that they had to learn quite a few new concepts about using a framework, and actually crafting the architectural solution structure (solutions, projects, source files etc) was pretty tedious and of course error prone. Not to mention if you changed the name of anything, you had to update a number of source code artefacts all around the place. These issues are not specific to this framework at all, but in fact any Enterprise solution development, with or without a framework in place. The other issue, which was a side effect of using a framework is that the code that the practitioners have to write starts to become very boiler plate like, and again tedious. (Since many of the coding concerns have been absorbed into the framework and architecture, that's the point after all).&lt;/p&gt;
&lt;p&gt;So we decided to create an automation toolkit over the framework that builds these apps and services using design surfaces and meta-data definitions (Modelling), that outputs the source code artefacts (Automation) to free the developer from learning all its intricacies (Abstraction) and leverage domain specific knowledge and experience in areas where technology is key to providing a resolution (Extensibility). Our timing was impeccable since at the time of this creation, the Guidance Automation Toolkit (GAT) and the Domain Specific Language (DSL) toolkit were under construction too.&lt;/p&gt;
&lt;p&gt;So by combining elements of those toolkits and some other select features of Visual Studio 2005, we have created an 'Architectural Guidance Package' - a &lt;strong&gt;'Solution Development Construction Toolkit'&lt;/strong&gt; for creating Enterprise Service Oriented Applications and Services all within your favourite development tool - Visual Studio.&lt;/p&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Factory Principals and Goals&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;The guiding principals and goals of the factory are many, most driven from practitioners using EFx before it became automated, and some driven from the new 'Software Factory' initiative emerging within Microsoft. I'll list a few here so you get the basic idea:&lt;/p&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Automated Guidance&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Avoiding the '&lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/02/19/535109.aspx"&gt;Visual Studio Stare'&lt;/a&gt;.&lt;/li&gt;
&lt;li&gt;Provide an obvious means of starting with solution development design process without a requirement for up front detailed design documentation.&lt;/li&gt;
&lt;li&gt;Knowledge transfer from the guidance to the developer throughout.
&lt;ul&gt;
&lt;li&gt;Allow the knowledge that went into the creation of the guidance emanate through as learnings to those using it.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Make solution development a creative, visual, repeatable, predictable and enjoyable task.
&lt;ul&gt;
&lt;li&gt;Provide guidance that models human solution development, so that it 'feels right' and follows a predictable and familiar path - discoverable.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Allow solution development to evolve as the requirements for the solution evolve - agility.&lt;/li&gt;
&lt;li&gt;Capture the design in artefacts that remain relevant throughout the solution life-cycle.
&lt;ul&gt;
&lt;li&gt;Focus upon capturing the intent, the assumptions, decisions 'the unquantifiable experience' of the implementer.&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Abstraction&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Allow the developer to maintain a holistic 'point of view' of the solution, so they don't become deeply focused and entrapped by specific technology implementation and its intricacies and constraints.
&lt;ul&gt;
&lt;li&gt;It is solution development after all!&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;Provide design artefacts that capture the intention of the design, at a sufficiently high enough detail to avoid technology constraints.&lt;/li&gt;
&lt;li&gt;Let the tool do the hard work, automate where possible, create where not.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Extensibility&lt;/span&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;Leverage and extend existing familiar domain specific languages where possible and appropriate&lt;/li&gt;
&lt;li&gt;Don't create yet another unfamiliar experience.&lt;/li&gt;
&lt;li&gt;Integrate with other specialised guidance toolkits that focus on a specific pattern or technology, and leverage that guidance&lt;/li&gt;
&lt;li&gt;Don't attempt to specialise in all areas, or encapsulate all aspects of solution development.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Customisation&lt;/span&gt;&lt;br/&gt;&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;All guidance artefacts should offer a level of extensibility and customisation to suit a variety of styles, processes and organisations.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;Together these guiding principals have driven the development of this factory towards the goal of automating and guiding the solution architect and developers through most of the aspects of creating enterprise applications and services.&lt;/p&gt;
&lt;p&gt;It should be mentioned at this point that due to the issues discussed in &lt;a href="http://blogs.msdn.com/jezzsa/archive/2006/02/19/535106.aspx"&gt;File | New | 'Blank Problem'&lt;/a&gt; that we are not attempting to automate everything - don't fret. We recognise that the one thing we cannot automate today is the business logic of the system, for this we allow the developer to still write code that does this, but for all other aspects which amount to mostly architectural concerns, we describe these at a higher level of abstraction and therefore are able to provide an guided automated solution.&lt;/p&gt;
&lt;p&gt;&lt;span style="TEXT-DECORATION: underline"&gt;&lt;strong&gt;Design Time Experience&lt;/strong&gt;&lt;/span&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="350" height="165" src="http://blogs.msdn.com/photos/jezzsa/images/544659/original.aspx"/&gt;&lt;/p&gt;
&lt;p&gt;The factory provides a design time experience that is intended to be familiar to the user, by utilising the design tools available in Visual Studio today.&lt;br/&gt;It 'configures' Visual Studio to provide a customised environment that enables the development of solutions specific to the domain of constructing end-to-end enterprise applications and services. The toolkit does this by leveraging several technologies that are integrated into Visual Studio including the following:&lt;/p&gt;
&lt;ul&gt;
&lt;li&gt;The Guidance Automation Toolkit (GAT). GAT is built upon Guidance Automation eXtensions (GAX) which provides a foundation for defining recipes and executing custom actions within the Visual Studio IDE.&lt;/li&gt;
&lt;li&gt;The Domain Specific Language Toolkit (DSL). The DSL toolkit enables the creation of domain specific languages to model software concepts, easily.&lt;/li&gt;
&lt;li&gt;Visual Studio Application &amp;amp; System Designers. These designers enable architects to define systems based upon the high level components of a system and allows the definition of deployment settings and constraints that can be validated at deployment time. The designers provide a visual representation of the components and the relationship between them, and provide several different viewpoints of the system and how it is deployed.&lt;/li&gt;
&lt;li&gt;The Managed Package Framework. This framework allows custom packages to be built and provide Visual Studio integration elements such as custom commands, menus, editors and tool windows.&lt;/li&gt;
&lt;/ul&gt;
&lt;p&gt;&lt;strong&gt;&lt;span style="TEXT-DECORATION: underline"&gt;Generation Time&lt;/span&gt;&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;&lt;img width="350" height="222" src="http://blogs.msdn.com/photos/jezzsa/images/551155/original.aspx"/&gt;&lt;/p&gt;
&lt;p&gt;Since one of the objectives of the factory is to reduce the maintenance/improve the quality of the code it generates, and provide reusable components, the factory generates source artefacts (applications &amp;amp; services) that are built upon the application framework foundation (EFx).&lt;/p&gt;
&lt;p&gt;These source artefacts are created by the factory from modelling the domain of enterprise application and service construction, using specific designers and specialised tools, that generate the solution and source for the layers and components in that solution.&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=544740" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category></item><item><title>EFx - An Architectural Guidance Package</title><link>http://blogs.msdn.com/jezzsa/archive/2005/11/09/efx-an-architectural-guidance-package.aspx</link><pubDate>Thu, 10 Nov 2005 00:10:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:490997</guid><dc:creator>jezzsa</dc:creator><slash:comments>1</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/490997.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=490997</wfw:commentRss><description>
&lt;p&gt;Its flattering to hear from a well respected authority and author in the field of Software Factories, that EFx and its toolkit &lt;em&gt;is&lt;/em&gt; in fact a Software Factory.&lt;/p&gt;
&lt;p&gt;Now, I don't fully understand what it means to be a whole software factory, even though I understand the initiative very well.&lt;/p&gt;
&lt;p&gt;(Yes - believe it or not, reading the book doesn't necessarily mean you get a full definition of one from it - its over 600 pages long. Full respect goes to the authors though, they have a whole industry to sway towards this thinking, and a simple 2 paragraph explanation ain't gonna do it for most people). The &lt;a href="http://msdn.microsoft.com/msdntv/episode.aspx?xml=episodes/en/20041118SoftFact/manifest.xml"&gt;webcast&lt;/a&gt; is more concise about, it and to be fair.&lt;/p&gt;
&lt;p&gt;Now from that video, the combination of EFx and the toolkit fits the definition very well. But then again the definition is pretty broad, so many people will be happy to know they have factories already too!&lt;/p&gt;
&lt;p&gt;Most of my customers don't know much (more like - never heard of) Software Factories either, so it seems pointless to describe this framework and toolkit as one. Instead, after a little discussion with &lt;a href="http://blogs.msdn.com/wojtek"&gt;Wojtek&lt;/a&gt; today, and full thanks to him, we have decided that this is better termed a '&lt;em&gt;Architectural Guidance Package'&lt;/em&gt;. That is much easier to explain to customers in 60secs than what is a software factory. I am finding that describing a software factory sufficiently, often leads to a long monologue about the history of software and how its soon to be revolutionised. Its takes to long - no matter how interesting it actually is.&lt;/p&gt;
&lt;p&gt;&lt;em&gt;'Architectural Guidance Package&lt;/em&gt;' is much easier to explain since the words speak for themselves. So we are keeping it.&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490997" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category></item><item><title>EFx - On the face of it</title><link>http://blogs.msdn.com/jezzsa/archive/2005/11/09/efx-on-the-face-of-it.aspx</link><pubDate>Wed, 09 Nov 2005 14:57:00 GMT</pubDate><guid isPermaLink="false">91d46819-8472-40ad-a661-2c78acb4018c:490778</guid><dc:creator>jezzsa</dc:creator><slash:comments>0</slash:comments><comments>http://blogs.msdn.com/jezzsa/comments/490778.aspx</comments><wfw:commentRss>http://blogs.msdn.com/jezzsa/commentrss.aspx?PostID=490778</wfw:commentRss><description>
&lt;p&gt;Its a pretty exciting time at present for the future of EFx and its toolkit.&lt;/p&gt;
&lt;p&gt;We are developing a toolkit for the framework, the one piece that has been missing for some time. What's really exciting is the vision that this toolkit delivers. Its a bold one, but extremely powerful.&lt;/p&gt;
&lt;p&gt;With this toolkit, we are able to create an entire Service Oriented Enterprise LOB solution that includes many client applications and/or services. We will be drawing the applications on diagrams and using recipes to create all the necessary project artefacts required by the solution. It is possible to draw a whole layered system from Service Interface through to the Data Access classes on a single diagram. The diagram models the interaction of the method calls between the layers and any programming requirements of the method calls (sequencing, transactions, authorisation, entity mapping, aggregation etc).&lt;/p&gt;
&lt;p&gt;The diagram will generate the underlying code, and allow extension points for the developer to customise that code, to add finer granularity. Of course the code will be leveraging features of the underlying framework, and therefore all infrastructural services of Enterprise Library and extensions to that. The wizards will allow the developer to define the format of method calls without having to write the code. Its kind of like: coding by policy.&lt;/p&gt;
&lt;p&gt;&lt;img width="600" height="469" src="http://blogs.msdn.com/photos/jezzsa/images/538548/original.aspx"/&gt;&lt;/p&gt;
&lt;img src="http://blogs.msdn.com/aggbug.aspx?PostID=490778" width="1" height="1"&gt;</description><category domain="http://blogs.msdn.com/jezzsa/archive/tags/EFx+Software+Factory/default.aspx">EFx Software Factory</category></item></channel></rss>