blob: a70abf3268da4495844ef971e87657e12e653082 [file] [log] [blame]
<?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.4/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf"
epf:version="1.2.0" xmi:id="-awaQ_2dwhGyKRoVKQ-esPQ"
name="finding_analysis_classes,_uF-QYEAhEdq_UJTvM1DM2Q" guid="-awaQ_2dwhGyKRoVKQ-esPQ"
changeDate="2007-04-24T14:03:24.760-0700" version="1.0.0">
<mainDescription>&lt;p> When identifying the elements for a scenario of system behavior, you can align &#xD;
each participating element with one of three key perspectives: &lt;b>Entity&lt;/b>, &#xD;
&lt;b>Control&lt;/b>, or &lt;b>Boundary&lt;/b>. Although specifics of languages, frameworks, &#xD;
and heuristics of quality design&amp;nbsp;will&amp;nbsp;drive the final design, a first &#xD;
cut that covers required system behavior can always be assembled with elements &#xD;
of these three perspectives. &lt;/p>&#xD;
&lt;p> This pattern is similar to the Model View Controller pattern (described here &#xD;
[&lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#BUS96&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>BUS96&lt;/a>] &#xD;
and here [&lt;a class=&quot;elementLinkWithUserText&quot; href=&quot;./../../../openup/guidances/supportingmaterials/references_6CCF393.html#WIKP-MVC&quot; guid=&quot;_9ToeIB83Edqsvps02rpOOg&quot;>WIKP-MVC&lt;/a>], &#xD;
among other places), but the Entity Control Boundary (ECB) pattern is not solely &#xD;
appropriate for dealing with user interfaces, and it gives the controller a &#xD;
slightly different role to play. &lt;/p>&#xD;
&lt;h4 align=&quot;left&quot;> ECB&amp;nbsp;pattern example &lt;/h4>&#xD;
&lt;p>&#xD;
&amp;nbsp;&lt;img height=&quot;233&quot; alt=&quot;&quot; src=&quot;./resources/EBCDiagram.JPG&quot; width=&quot;493&quot; />&#xD;
&lt;/p>&#xD;
&lt;h1> Entity elements &lt;/h1>&#xD;
&lt;p> An entity is a long-lived, passive element that is responsible for some meaningful &#xD;
chunk of information. This is not to say that entities are &quot;data,&quot; while other&amp;nbsp;design &#xD;
elements&amp;nbsp;are &quot;function.&quot; Entities perform behavior organized around some &#xD;
cohesive amount of data. &lt;/p>&#xD;
&lt;p> An example of an entity for a customer service application is a Customer entity &#xD;
that manages all information about a customer.&amp;nbsp; A design element for&amp;nbsp;this &#xD;
entity would include data about the customer, behavior to manage the data, behavior &#xD;
to validate customer information&amp;nbsp;and to perform other business calculations, &#xD;
such as &quot;Is this customer allowed to purchase product X?&quot; &lt;/p>&#xD;
&lt;p> The identification of the entities as part of this pattern can be done many &#xD;
times at different levels of abstraction from the code, at different levels &#xD;
of granularity in size, and from the perspectives of different contexts. For &#xD;
example, you could do an analysis pass on a scenario of creating a marketing &#xD;
campaign and identify the customer element with various customer data elements, &#xD;
such as name and address, plus various required behaviors, such as the management &#xD;
of the name and address data and the ability to&amp;nbsp;rate the customer based &#xD;
on some algorithm&amp;nbsp;(such an application of this pattern would be abstract &#xD;
from code, coarse-grained, and have no specific context). Later, you could do &#xD;
a pass on the same scenario applying an architectural mechanism for database &#xD;
access that breaks the address out as its own element, moves the responsibility &#xD;
for storing and retrieving customers to a new control element, and identifies &#xD;
specific database decisions,&amp;nbsp;such as&amp;nbsp;the use of primary keys in the &#xD;
entities. (Such an application of this pattern would be closer to the code, &#xD;
finer-grained, and aligned with a database&amp;nbsp;context.)&lt;/p>&#xD;
&lt;h1> Control elements &lt;/h1>&#xD;
&lt;p> A control element manages the flow of interaction of the scenario. A control &#xD;
element could manage the end-to-end behavior of a scenario. or it could manage &#xD;
the interactions between a subset of the elements. Behavior and business rules &#xD;
relating to the information relevant to the scenario should be assigned to the &#xD;
entities; the control elements are responsible only for the flow of the scenario. &#xD;
&lt;/p>&#xD;
&lt;p> CreateMarketingCapmpaign is an example&amp;nbsp;of a control element&amp;nbsp;for &#xD;
a customer service application. This design element would&amp;nbsp;be responsive &#xD;
to certain frontend boundary elements and would collaborate with other entities, &#xD;
control&amp;nbsp;elements, and backend boundary elements to support the creation &#xD;
of a marketing campaign. &lt;/p>&#xD;
&lt;p> As with the entity example here, there might be many passes over the identification &#xD;
of control elements. A first pass might be an analysis pass that identifies &#xD;
one control element for a&amp;nbsp;scenario, with behavior to make sure that the &#xD;
design can support the flow of events. A&amp;nbsp;subsequent pass might find controllers &#xD;
to manage reusable collaborations of low-level elements that will map to a specific &#xD;
code&amp;nbsp;unit to be written. &lt;/p>&#xD;
&lt;h1> Boundary elements &lt;/h1>&#xD;
&lt;p> A boundary element lies on the periphery of a system or subsystem, but within &#xD;
it. For any scenario being considered either across the whole system or within &#xD;
some subsystem, some boundary elements will be &quot;frontend&quot; elements that accept &#xD;
input from outside of the area under design, and other elements will be &quot;backend,&quot; &#xD;
managing communication to supporting elements outside of the system or subsystem. &#xD;
&lt;/p>&#xD;
&lt;p> Two examples of boundary elements for a customer service application might &#xD;
be a frontend MarketingCampaignForm and a backend BugdetSystem element. The &#xD;
MarketingCampaignForm would manage the exchange of information between a user &#xD;
and the system, and the BugdetSystem would manage the exchange of information &#xD;
between the system and an external system that manages budgets. &lt;/p>&#xD;
&lt;p> An analysis pass could identify one boundary element for each external relevant &#xD;
to a scenario. Subsequently, these could be broken down into multiple boundary &#xD;
elements or&amp;nbsp;small communities made up of collaborating&amp;nbsp;elements&amp;nbsp;of &#xD;
all three stereotypes. &lt;/p>&#xD;
&lt;h1> Walking through the scenario &lt;/h1>&#xD;
&lt;p> You can walk through a scenario initiated by something outside of the boundaries &#xD;
of the system or subsystem being designed and distribute the responsibility &#xD;
to perform behavior supporting the scenario to the elements identified of each &#xD;
type.&amp;nbsp; The appropriate design element responsible for each action in the &#xD;
scenario will be as described in the definition of each of the element types &#xD;
described here previously. &lt;/p>&#xD;
&lt;p> In addition to identifying the behavior necessary to perform the scenario, &#xD;
the initiation of this behavior from design element to design element&amp;nbsp;identifies &#xD;
the necessary relationships. There are certain appropriate&amp;nbsp;relations between &#xD;
the participating elements.&amp;nbsp;An element can communicate with other elements &#xD;
of the same kind. Control&amp;nbsp;elements can communicate with each of the other &#xD;
two kinds, but entities and boundary elements should not communicate directly.&amp;nbsp; &#xD;
&lt;/p>&#xD;
&lt;p> This table shows appropriate links between design elements. &lt;/p>&#xD;
&lt;table cellspacing=&quot;2&quot; cellpadding=&quot;2&quot; width=&quot;400&quot; summary=&quot;Appropriate Links&quot; border=&quot;1&quot;>&#xD;
&lt;tbody>&#xD;
&lt;tr>&#xD;
&lt;td> &lt;center>&#xD;
&lt;/center>&lt;/td>&#xD;
&lt;th scope=&quot;col&quot;> &lt;center>&#xD;
Entity &lt;/center>&lt;/th>&#xD;
&lt;th scope=&quot;col&quot;> &lt;center>&#xD;
Boundary &lt;/center>&lt;/th>&#xD;
&lt;th scope=&quot;col&quot;> &lt;center>&#xD;
Control &lt;/center>&lt;/th>&#xD;
&lt;/tr>&#xD;
&lt;tr> &#xD;
&lt;th scope=&quot;row&quot;> Entity &lt;/th>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
&lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr> &#xD;
&lt;th scope=&quot;row&quot;> Boundary &lt;/th>&#xD;
&lt;td> &lt;center>&#xD;
&lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
&lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;tr> &#xD;
&lt;th scope=&quot;row&quot;> Control &lt;/th>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;td> &lt;center>&#xD;
X &lt;/center>&lt;/td>&#xD;
&lt;/tr>&#xD;
&lt;/tbody>&#xD;
&lt;/table>&#xD;
&lt;p> By&amp;nbsp;applying this pattern, you can put a robust design together that identifies &#xD;
the elements, behavior, and relationships&amp;nbsp;necessary to support&amp;nbsp;a scenario.&amp;nbsp; &#xD;
&lt;/p></mainDescription>
</org.eclipse.epf.uma:ContentDescription>