Skip to content

'this' has limitations inside bl constructor #91

Open
@ellik95

Description

@ellik95

Subject of the issue

this has limitations of usage inside the constructor. See an example below:

Steps to reproduce

If anyone types this in bl:

ValueObject TitleVO {
  constructor(props: TitleProps): (OK(TitleVO), Errors(DomainErrors.TitleOutOfBoundsError)) {
    const title = this.toUpperCase(props.title);
    applyRules(TitleOutOfBoundsRule(title));
  }

  private toUpperCase() {...}
}

In typescript will be generated this:

export class TitleVO extends Domain.ValueObject<TitleProps> {
  get title(): string {
    return this.props.title;
  }

  private constructor(props: TitleProps) {
    super(props);
    const title = this.toUpperCase(props.title);
  }

  public static create(props: TitleProps): Either<TitleVO, DomainErrors.TitleOutOfBounds> {
    const res = Domain.applyRules([new Rules.TitleOutOfBounds(title)]);
    if (res) return fail(res);
    return ok(new TitleVO(props));
  }

  private toUpperCase(title: string) {...}
}

Expected behaviour

I should be able to do something like the above in bl.

Actual behaviour

this.props.title in create will produce an error, because it is set in the static create method and this is not set yet.

Suggested solutions?

Redesign bl language to have both constructor and create in domain?

Metadata

Metadata

Assignees

No one assigned

    Labels

    bugSomething isn't working

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions