| 10 | |
| 11 | == !Introduction/Use case == |
| 12 | |
| 13 | The goal of designing components and profiles in the !ComponentRegistry is to eventually make them available in the public space so that everyone can use them as a basis for metadata creation. However, once published a component gets 'frozen' so that all instantiations can rely on it not changing and thus are guaranteed to retain their validity. Also, after a certain 'cooling down' period, published components cannot be removed from the public space (except by administrators). |
| 14 | |
| 15 | Robust though this practice may be, it leads to issues when changes in the domain, or simply new insights, need to be incorporated in the component. It is easy to create a new component based on an existing one, extend it and finally make it public. But then one would like to communicate to the users of the component that they should use the new component for new metadata (possibly even convert existing metadata) instead of the old one. However, there are a few problems: |
| 16 | |
| 17 | * There is no reliable way to find out who is instantiating specific components, so the users are unknown and cannot simply be informed |
| 18 | * The old component cannot be deleted, so new users might accidentally start using the old one |
| 19 | * All of this is very informal, and requires a lot of work with few guarantees |
| 20 | |
| 21 | A formal way of deprecating components and specifying versioning information would solve these issues. The owner of a component can simply: |
| 22 | |
| 23 | 0. Create a new component (typically copying the existing component as a basis) |
| 24 | 0. Edit until satisfied |
| 25 | 0. Publish into public space |
| 26 | 0. Deprecate the 'precursor' component |
| 27 | 0. Designate the new component as 'successor' to the old one |
| 28 | |
| 29 | The !ComponentRegistry can then provide this information to all clients that request the deprecated component, and remove it from the public list. Clients should of course still be able to use the deprecated component since it is not always possible to upgrade. |