blob: 88f01b191689c807c7fd52205134b69329a97f89 [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.5/uma.ecore"
xmlns:epf="http://www.eclipse.org/epf" epf:version="1.5.0" xmlns:rmc="http://www.ibm.com/rmc"
rmc:version="7.5.0" xmi:id="-5CLdH3UFH1QyioMJKjggvg"
name="practice_fw_plugin_parts,_vgjh4PG1EdyO9sYxKNWf8A" guid="-5CLdH3UFH1QyioMJKjggvg"
changeDate="2008-11-05T04:50:07.296-0800" version="7.2.0">
<mainDescription>&lt;p>&#xD;
In order to improve the configurability and navigability of a &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.mdev.common.base/guidances/concepts/practice_fw_6DA4D54D.html&quot;&#xD;
guid=&quot;__LjaEFQsEd2uvIuuFjd1Fg&quot;>Practice Framework&lt;/a>&amp;nbsp;library, the concept of plug-in parts was introduced.&#xD;
“Plug-in parts” basically says that each of the&amp;nbsp;&lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.mdev.common.base/guidances/concepts/practice_lib_plugin_types_3EA8002F.html&quot;&#xD;
guid=&quot;__428YO6cEdygKbJMUVNEtg&quot;>Practice Library Plug-In Types&lt;/a>&amp;nbsp;is actually implemented as more than one&#xD;
physical plug-in.&amp;nbsp;Specifically, any plug-in that is intended to be extended, or has method elements that are&#xD;
delayed assigned (e.g., contains work products and/or tasks) can be considered a “logical” plug-in that has one or more&#xD;
“physical” plug-in &quot;parts&quot;:&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Figure 1 shows the plug-in parts and their relationships. In this diagam, [Plug-In X], [Plug-In Y] and [Plug-In&#xD;
Z]&amp;nbsp;represent logical plug-ins.&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
Figure 1. Plug-In Parts and&amp;nbsp;their Relationships&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
&lt;img alt=&quot;plugin_parts&quot; src=&quot;resources/plugin_parts.jpg&quot; />&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
The relationships shown in&amp;nbsp;Figure 1 can be described as follows:&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;p>&#xD;
&lt;strong>Base&lt;/strong> plug-ins contain the &lt;u>base&lt;/u> definitions of the method elements of the logical plug-in.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
A logical plug-in only has one Base plug-in&amp;nbsp;(this makes it easy to see where the base element definitions&#xD;
&quot;live&quot;).&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Base plug-ins may depend on other Base plug-ins (dependencies between Base plug-ins represent dependencies between&#xD;
the logical plug-ins).&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
&lt;strong>Extend&lt;/strong> plug-ins contain elements that &lt;u>extend&lt;/u> (i.e., customize) elements in the Base&#xD;
plug-in.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
A logical plug-in can have zero or more Extend plug-ins (a plug-in does not have to be customized and it may be&#xD;
customized in different ways).&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Extend plug-ins depend on the Base plug-in that contain the elements being extended.&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Since there may be more than one Extend plug-in, the plug-in names should be qualified.&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
&lt;strong>Assign&lt;/strong> plug-ins contain the &lt;u>assignment&lt;/u> of method elements in a Base or an Extend plug-in to&#xD;
those things for which delayed assignment is supported (it does NOT contain all assignments).&amp;nbsp;For more information&#xD;
on delayed assignment, see &lt;a class=&quot;elementLinkWithType&quot;&#xD;
href=&quot;./../../../core.mdev.common.base/guidances/concepts/delayed_assignment_24142865.html&quot;&#xD;
guid=&quot;_rlrykJcbEd2sTqxclDgvog&quot;>Concept: Delayed Assignment&lt;/a>.&amp;nbsp;&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
A logical plug-in can have zero or more Assign plug-ins. If&amp;nbsp;a&amp;nbsp;Base (or an Extend)&amp;nbsp;plug-in does not&#xD;
contain any elements that need to be delayed assigned, then there is not an Assign plug-in.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>Assignment extensions&lt;/strong>. If the logical plug-in is extended (there's an Extend plug-in) and those&#xD;
extensions include things that are delayed assigned, then there needs to be an Assign plug-in for those extensions&#xD;
(and the Assign plug-in is dependent on the Extend plug-in).&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>Alternate assignments&lt;/strong>.&amp;nbsp; If there are alternate assignment approaches that apply to Base or&#xD;
Extend plug-in&amp;nbsp;elements, then there will be separate Assign plug-ins for the alternate assignment&#xD;
schemes.&lt;br />&#xD;
Note: In actuality, only one assignment scheme should be included in a method library (or workspace) at a time and&#xD;
those that are there, should always be selected (that's why these assignments are &quot;under&quot; the logical plug-in).&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Assign plug-ins depend on the Base or Extend plug-ins&amp;nbsp;that contain the definitions of the elements being&#xD;
assigned.&amp;nbsp;For example, an Assign plug-in may depend on the Base plug-in that contains a task, the Category&#xD;
Definition Base plug-in that contains the discipline the task is being assigned to, and the Role Definition Base&#xD;
plug-in that contains the definition of the role that is being assigned to the task.&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
Since there may be more than one Assign plug-in, the plug-in names should be qualified.&amp;nbsp;Specifically, if the&#xD;
assignments are for an extension, the same name qualifier should be used as was used on the Extend plug-in, so it&#xD;
is easy to see why the Assign plug-in is extended.&amp;nbsp;If the assignments are for a particular assignment scheme,&#xD;
use a qualifier that indicates that scheme (e.g., maybe a specific &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.mdev.common.base/guidances/termdefinitions/context_AF8B381C.html&quot;&#xD;
guid=&quot;_Kemu0PHZEdyO9sYxKNWf8A&quot;>context&lt;/a>&amp;nbsp;and/or &lt;a class=&quot;elementLink&quot;&#xD;
href=&quot;./../../../core.mdev.common.base/guidances/concepts/practice_config_CC7754F2.html&quot;&#xD;
guid=&quot;_0H9aAO7EEdy9EOwDlaw7Kw&quot;>Practice Configuration&lt;/a>).&#xD;
&lt;/li>&#xD;
&lt;/ul>&#xD;
&lt;p>&#xD;
The benefits of the plug-in parts concept are:&#xD;
&lt;/p>&#xD;
&lt;ul>&#xD;
&lt;li>&#xD;
The &lt;strong>separation of concerns&lt;/strong> between the: (1)&amp;nbsp;base method element definitions, (2) extensions&#xD;
to those base definitions, and (3) delayed assignment of the elements&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>Alternative assignment approaches are easy to define&lt;/strong>.&amp;nbsp; Assign plug-ins are easily replaced&#xD;
with alternate assignment plug-ins. That way authors can define their own role assignments to implement specific&#xD;
governance processes and/or may define their own categorization schemes.&#xD;
&lt;/li>&#xD;
&lt;li>&#xD;
&lt;strong>Logical plug-in extensions and assignments appear together in the library and are easy to select when&#xD;
defining a configuration&lt;/strong>.&amp;nbsp;The definition of these plug-in parts and the implementation of an&#xD;
appropriate naming convention means that all parts of a plug-in are listed together in the library and can be&#xD;
selected together&amp;nbsp;when defining a&amp;nbsp;configuration.&amp;nbsp;&#xD;
&lt;/li>&#xD;
&lt;/ul></mainDescription>
</org.eclipse.epf.uma:ContentDescription>