<?xml version="1.0" encoding="UTF-8"?>
<org.eclipse.epf.uma:ContentDescription xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:org.eclipse.epf.uma="http://www.eclipse.org/epf/uma/1.0.6/uma.ecore" xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.1" xmlns:rmc="http://www.ibm.com/rmc" rmc:version="7.5.1" xmi:id="-SJrpVySJ2npYs8NwGvnHjw" name="arch_mechanism,_mzxI0A4LEduibvKwrGxWxA" guid="-SJrpVySJ2npYs8NwGvnHjw" authors="Mark Dickson" changeDate="2009-08-14T03:33:43.000-0700" changeDescription="Simplified text explaining mechanism concept" version="1.0.0">
  <mainDescription>&lt;h3>&#xD;
    What are Architectural Mechanisms?&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
    Architectural Mechanisms are common solutions to common problems that can be used during development to minimize&#xD;
    complexity.&amp;nbsp; They represent key technical concepts that&amp;nbsp;will be standardized across the solution.&amp;nbsp;&#xD;
    Architecture mechanisms facilitate the evolution of architecturally significant aspects of the system. They allow the&#xD;
    team to maintain a cohesive architecture while enabling implementation details to be deferred until they really need to&#xD;
    be made.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Architectural Mechanisms are&amp;nbsp;used to satisfy architecturally significant requirements. Usually those are&#xD;
    non-functional requirements such as performance and security issues.&amp;nbsp;When fully described, Architectural&#xD;
    Mechanisms show patterns of structure and behavior in the software. They&amp;nbsp;form the basis of&amp;nbsp;common&#xD;
    software&amp;nbsp;that will be&amp;nbsp;consistently applied&amp;nbsp;across the product being developed. They also form the basis&#xD;
    for standardizing the way that the software works; therefore, they are an important element of the overall software&#xD;
    architecture. The definition of architecture mechanisms also enable decisions on whether existing software components&#xD;
    can be leveraged to provide the required behavior; or whether new software should be bought or built.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The value in defining architecture mechanisms is that they:&#xD;
&lt;/p>&#xD;
&lt;ol>&#xD;
    &lt;li>&#xD;
        Explicitly call out&amp;nbsp;aspects of the solution mechanics that are common across the system. This helps you plan.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Put down markers for the developers to build those aspects of the system once and then re-use them. This reduces&#xD;
        the workload.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        Promote the development of a consistent set of services. This makes the system easier to maintain.&#xD;
    &lt;/li>&#xD;
&lt;/ol>&#xD;
&lt;p>&#xD;
    An&amp;nbsp;Architectural Mechanism can have three states: Analysis, Design and Implementation.&amp;nbsp;These&#xD;
    categories&amp;nbsp;reflect the maturity of the mechanism's description. The state changes as successive levels of detail&#xD;
    are uncovered during when you refine &lt;a class=&quot;elementLink&quot;&#xD;
    href=&quot;./../../../core.tech.common.extend_supp/guidances/concepts/arch_significant_requirements_1EE5D757.html&quot;&#xD;
    guid=&quot;_HrZGIA4MEduibvKwrGxWxA&quot;>Architecturally Significant Requirements&lt;/a>&amp;nbsp;into working software. The categories&#xD;
    are summarized in the table that follows.&#xD;
&lt;/p>&lt;strong>States of an Architectural Mechanism&lt;/strong> &#xD;
&lt;table style=&quot;WIDTH: 806px; HEIGHT: 228px&quot; border=&quot;1&quot; cellspacing=&quot;0&quot; summary=&quot;Types of Architectural Mechanism&quot;&#xD;
cellpadding=&quot;2&quot; width=&quot;806&quot;>&#xD;
    &lt;tbody valign=&quot;top&quot;>&#xD;
        &lt;tr>&#xD;
            &lt;th scope=&quot;col&quot;>&#xD;
                State&#xD;
            &lt;/th>&#xD;
            &lt;th scope=&quot;col&quot;>&#xD;
                Description&#xD;
            &lt;/th>&#xD;
        &lt;/tr>&#xD;
        &lt;tr>&#xD;
            &lt;td>&#xD;
                Analysis&#xD;
            &lt;/td>&#xD;
            &lt;td>&#xD;
                &lt;p>&#xD;
                    A conceptual solution to a common technical problem. For example,&amp;nbsp;persistence is an abstract&#xD;
                    solution to the common requirement to store data. The purpose of this category is simply to identify&#xD;
                    the need for an Architectural Mechanism to be designed and implemented; and capture basic attributes&#xD;
                    for that mechanism.&#xD;
                &lt;/p>&#xD;
            &lt;/td>&#xD;
        &lt;/tr>&#xD;
        &lt;tr>&#xD;
            &lt;td>&#xD;
                Design&#xD;
            &lt;/td>&#xD;
            &lt;td>&#xD;
                &lt;p>&#xD;
                    A refinement of an Analysis Mechanism into a concrete technology (for example, RDBMS). The purpose of&#xD;
                    this category is to guide precise product or technology selection.&#xD;
                &lt;/p>&#xD;
            &lt;/td>&#xD;
        &lt;/tr>&#xD;
        &lt;tr>&#xD;
            &lt;td>&#xD;
                Implementation&#xD;
            &lt;/td>&#xD;
            &lt;td>&#xD;
                &lt;p>&#xD;
                    A further refinement from a design mechanism into a specification for the software. This can be&#xD;
                    presented as a design pattern or example code.&#xD;
                &lt;/p>&#xD;
            &lt;/td>&#xD;
        &lt;/tr>&#xD;
    &lt;/tbody>&#xD;
&lt;/table>&lt;br />&#xD;
&lt;p>&#xD;
    For more information on these different types of mechanisms, see the attached concepts.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Be aware that these states are frequently referred to themselves as Analysis, Design and Implementation&#xD;
    mechanisms.&amp;nbsp;These are synonyms and merely represent the architecture mechanisms in different states of&#xD;
    development. The transition from one state to another&amp;nbsp;can often be obvious or intuitive. Therefore, it can be&#xD;
    achieved in a matter of seconds. It can also require more considered analysis and design, thus take longer.&amp;nbsp;The&#xD;
    important point here is that these categories of mechanisms apply to the same concept in different states. The only&#xD;
    difference between them is one of refinement or detail.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The following diagram illustrates the transition of Architectural Mechanisms from one state to another.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &lt;strong>State Machine for Architectural Mechanisms&lt;/strong>&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    &lt;img style=&quot;WIDTH: 876px; HEIGHT: 115px&quot; alt=&quot;Architectural Mechanism States&quot; src=&quot;resources/arch_mech_states.jpg&quot;&#xD;
    width=&quot;600&quot; height=&quot;113&quot; />&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;h3>&#xD;
    What Information Should be Captured for Architectural Mechanisms?&#xD;
&lt;/h3>&#xD;
&lt;p>&#xD;
    The information captured for each architectural mechanism category/state is different (though the information can be&#xD;
    seen as refinements of each other):&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        &lt;strong>Analysis Mechanisms&lt;/strong>, which give the mechanism a name, brief description and some basic&#xD;
        attributes&amp;nbsp;derived from&amp;nbsp;the project requirements&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        &lt;strong>Design Mechanisms&lt;/strong>, which are more concrete and assume some details of the implementation&#xD;
        environment&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        &lt;strong>Implementation Mechanisms&lt;/strong>, which specify the&amp;nbsp;exact implementation of&amp;nbsp;each mechanism&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
    When&amp;nbsp;a mechanism is&amp;nbsp;initially identified, it can be considered a marker that says to the team, &quot;We are going&#xD;
    to handle this aspect of the system in a standard way. We'll figure out the details later.&quot; As the project proceeds,&#xD;
    the architectural mechanisms are gradually refined until they become part of the software.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Analysis Mechanisms&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Analysis mechanisms&amp;nbsp;are the initial state for an architectural mechanism. They are identified early in the project&#xD;
    and represent&amp;nbsp;bookmarks for future software development. They allow the&amp;nbsp;team to focus on understanding the&#xD;
    requirements without getting distracted by the specifics of a complex implementation. Analysis mechanisms are&#xD;
    discovered by surveying the requirements and looking for recurrent technical concepts.&amp;nbsp;Security, persistence and&#xD;
    legacy interface are some examples of these. In effect, the analysis mechanism is where the requirements that&#xD;
    describe&amp;nbsp;architecturally significant topics&amp;nbsp;are collated and brought&amp;nbsp;together in a single list. This&#xD;
    makes them easier to manage.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    Analysis mechanisms are described in simple terms:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
    &lt;li>&#xD;
        &lt;strong>Name:&lt;/strong> Identifies the mechanism.&#xD;
    &lt;/li>&#xD;
    &lt;li>&#xD;
        &lt;strong>Basic attributes:&lt;/strong> Define the requirements of the mechanism. These attributes can vary depending&#xD;
        upon the mechanism being analyzed. Refer to &lt;a class=&quot;elementLinkWithType&quot;&#xD;
        href=&quot;./../../../core.tech.common.extend_supp/guidances/examples/architectural_mechanism_attributes_B0ECA2F7.html&quot;&#xD;
        guid=&quot;_eQ_s8Om5Edupia_tZIXEqg&quot;>Example: Architectural Mechanism Attributes&lt;/a>&amp;nbsp;for more guidance.&#xD;
    &lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
    Once the list of analysis mechanisms has been defined it can be prioritized and the mechanisms refined in line&#xD;
    with&amp;nbsp;iteration&amp;nbsp;objectives. It is not necessary to develop the entire set of architecture mechanisms into&#xD;
    working software in a single pass. It is often more sensible to develop only those mechanisms required to support the&#xD;
    functionality to be delivered in the current iteration.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Design Mechanisms&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    Design mechanisms&amp;nbsp;represent decisions about the concrete technologies that are going to be used to&amp;nbsp;develop&#xD;
    architectural mechanisms. For example, the decision to use an RDBMS for persistence. It's often no more complicated&#xD;
    than that (though of course, the effort involved in making the decision can sometimes be quite complex).&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The decision on when to refine an architectural mechanism from an analysis state to a design state is largely&#xD;
    arbitrary. Often there will be constraints on the project that&amp;nbsp;force the decision on some of these issues. For&#xD;
    example, there may be a corporate standard for databases which mean that the decision&amp;nbsp;for the&amp;nbsp;persistence&#xD;
    mechanism can be made on day 1 of the project.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    On other occasions the decision may point to products that the project team has not yet acquired.&amp;nbsp;If so,&amp;nbsp;the&#xD;
    decision needs to be made in time to enable the required products to be made available to the team.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    It can often be useful to develop some prototype code to prove that these decisions are sound. The architect should be&#xD;
    confident that the technologies being selected are able to fulfill the requirements. The attributes captured against&#xD;
    the corresponding analysis mechanisms should be used as criteria to prove the validity of the decisions.&#xD;
&lt;/p>&#xD;
&lt;h4>&#xD;
    Implementation Mechanism&#xD;
&lt;/h4>&#xD;
&lt;p>&#xD;
    An implementation mechanism&amp;nbsp;specifies the actual implementation for the architectural mechanism (hence the&#xD;
    name).&amp;nbsp;It can be modeled as a design pattern or presented as&amp;nbsp;example code.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    The best time to&amp;nbsp;produce the&amp;nbsp;implementation mechanism is usually when the first piece of functionality that&#xD;
    needs it is scheduled for development. Architects and developers work together to develop this.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
    For examples of the kinds of information that you might capture for a mechanism, see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
    href=&quot;./../../../core.tech.common.extend_supp/guidances/examples/architectural_mechanism_attributes_B0ECA2F7.html&quot;&#xD;
    guid=&quot;_eQ_s8Om5Edupia_tZIXEqg&quot;>Example: Architectural Mechanism Attributes&lt;/a>.&#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>
