Task: Implement domain specific language |
| |
 |
Using meta-meta-model we create modeling language for our domain. |
Disciplines: Development |
|
Purpose
To provide modelers and developers the higher level of abstraction. |
Relationships
Roles | Primary Performer:
| Additional Performers:
|
Inputs | Mandatory:
| Optional:
|
Outputs |
|
Main Description
This
task builds on the basis of domain model, and specific vocabulary. Product - new language, raises the abstraction
level of problem, and leads to improvement in productivity of solving problem. It's most visible part of
DSM for developers and modelers. The most important concepts from the domain are mapped to the language concepts,
and less important to their properties. |
Steps
Identify modeling concepts
We need to find concepts that suits the situation of our problem. The process is usually iterative and depends on the domain size, our knowledge and situation stablility, may take several iterations. We should assume that most of the searched concept already exists, and can be found through talking with the stakeholders. It's important because people are familiar with their language are hesitant to learn new one. We are interested only in those concepts which allow us to describe the variation of model, but we have to take under consideration that it can be described also after connecting the elements to each other.
Try to find modeling concepts in:
· Architecture
· Existing products
· Specifications
· Patterns
· Existing code, libraries and frameworks
|
Defining domain concepts
The next step is mapping the domain concept on modeling language. In this step during design we deal with the problem if we making a static modeling concepts, or leaving decision about it to modeler. (How varied the language will be) It's worth to hint that latter decisions may bring difficulties in integration of models, tests, and creating code generator. If we decide to express variation in language we can use: · separete modeling object · propoerty of object · relationship between objects · property of relationships |
Defining rules
As most of the concepts are limited with some rules, we have to take them also under consideration. They play
important role as they prevent from errors, check complettness, and ease modeling work by using patterns and default
values. But being strict on requesting our rules is sometimes in conflict with usability of language. So it's also
good to think when we want to check, deny just after prohibited step, or maybe inform that we will
trigger a conflict in model. The example of most important rules are:
· Uniqueness of
elements
· Mandatory
propoerties
· Occurrence of
relationships
|
Defining notation
As far as visual representation doesn't matter during generation it's highly relevant for usability of our language. We
can choose different representation forms, like models, matrixs, tables, where each of them have their strengths and
weakness. Elements also can be represented by different kinds of symbols like text, sign or photo. It's also good
to ask our modelers to come up with their symbols for domain concepts.
|
Testing language
Early tests of new language ensure us about right direction of development. It's good to use many real life examples
done by developers who earlier builded applications within our domain. We can check for example if:
-
there is higher abstraction level
-
is specification consistent with language rules
-
aren't rules too strict
-
do we need all the concepts
|
|
Key Considerations
It is crucial that never the less domain should be narrow, it have to fully reflect project problem. Task
can be started in early begining even when the architecture isn't stabilised yet. It gives modeleres possibility
to get used to new langauge, and in the same time generator to be constructed by other developers. All the time
we need to keep balance between framework, generator and language.
|
|