Constraints
(Created page with "There are other ways to introduce business rules in the model than using state machines and guards. You can also use constraints. The model already has a lot of implicit const...")
 
No edit summary
Line 1: Line 1:
There are other ways to introduce business rules in the model than using state machines and guards. You can also use constraints. The model already has a lot of implicit constraints from the cardinalities of the association ends. Like if you have checcardinalityf 1..4 and you have zero objects in that relation – then you have broken constraint.
There are other ways to introduce business rules in the model than using state machines and guards. You can use '''constraints'''.  


The model already has a lot of implicit constraints from the cardinalities of the association ends. Like if you have cardinality 1..4 and you have zero objects in that relation – then you have broken constraint.
===== Define constraints =====
But you may also define you own constraints:
But you may also define you own constraints:


Line 7: Line 10:
You can choose if a broken constraint (a constraint that evaluates to false) should be treated as Information, Warning or a Error to the user.
You can choose if a broken constraint (a constraint that evaluates to false) should be treated as Information, Warning or a Error to the user.


===== Delete constraints =====
You can also define the constraint as being a delete constraint only:
You can also define the constraint as being a delete constraint only:


Line 26: Line 30:


I set that to “NeedNotBeEmptyNoWarning” – because deleting a car-object is ok even if it has a brand.
I set that to “NeedNotBeEmptyNoWarning” – because deleting a car-object is ok even if it has a brand.
===== Constraints evaluation in OCL =====
If you want to evaluate constraints in OCL, use [[OCLOperators constraints]] for example.


[[Category:UML]]
[[Category:UML]]

Revision as of 15:25, 14 December 2018

There are other ways to introduce business rules in the model than using state machines and guards. You can use constraints.

The model already has a lot of implicit constraints from the cardinalities of the association ends. Like if you have cardinality 1..4 and you have zero objects in that relation – then you have broken constraint.

Define constraints

But you may also define you own constraints:

Model car constraints.png

You can choose if a broken constraint (a constraint that evaluates to false) should be treated as Information, Warning or a Error to the user.

Delete constraints

You can also define the constraint as being a delete constraint only:

Constraint wrappper.png

This way have explained at the model level that the domain does not consider it to be ok to delete a Car-object as long as we have the deposit – unless it is in state Scrapped.

The delete constraints will be checked when is Deleted by MDriven – as a result of the Delete operator is executed on the class.

Other things that are checked when the Delete operator is run are the BusinessDeleteRules that exists on all association endpoints:

Business delete rule.png

We as modelers should decide what the best rule is for each association end. In this case – is it ok to delete a Brand if there are Cars left in the AllCarsOfThisBrand association? No I think not. I am setting it to “MustBeEmpty”.

The association in the other direct on the other hand

Business delete rule need not be empty.png

I set that to “NeedNotBeEmptyNoWarning” – because deleting a car-object is ok even if it has a brand.

Constraints evaluation in OCL

If you want to evaluate constraints in OCL, use OCLOperators constraints for example.

This page was edited 45 days ago on 04/02/2024. What links here