Constraints
This page was created by Alexandra on 2017-05-14. Last edited by Lars.olofsson@mdriven.net on 2025-02-13.

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.

MDriven Chat

How would you like to chat today?

Setting up your conversation…

This may take a few moments