Implementing Test or Macro?
Consider the example of rule:
"A root project has no project type".
This rule is applied to the "Project" MetaClass, and more particularly to root projects.
To implement this rule, you must:
firstly reduce the application scope of the rule.
carry out the test "This project is not connected to a project type".
Using tests
If we use expression tests to define this rule, we must create two expression tests.
One to test if the project is a root project, enabling filtering of the rule application scope.
Another to test if the project is connected to a project type serving to implement the rule.
Using macros
If we use a macro, we have to implement two functions:
RuleAppliableIs => this function enables restriction of rule application scope.
RuleApply => this function enables definition of rule implementation.
*If a rule is implemented by a macro, tests and filters are ignored. The macro code must manage implementation tests and filters on the application area.