public function of($type, $modifier = TransactionModifier::NONE)
    {
        if (!array_key_exists($type, $this->rules)) {
            $this->rules[$type] = [];
        }

        $target = new ValidationTarget($this, $type, $modifier);
        $this->rules[$type][] = $target;
        return $target;
    }