mercredi 28 décembre 2016

Extend inherited object structure from library

I created a base library/package containing the class Type and its childs ObjectType and PrimitiveType.

In addition to that, I have 3 different use cases for this type classes that logically belongs to other packages.

  1. Render a data type into a generated class (parameter or return type), e.g. toCode() => ?int = 3
  2. Render a data type into the documentation, e.g. toDoc() => int|null
  3. Convert a data type of the programming language to a database type, e.g. toDatabaseType() => TINYINT(1)

Of course I want to use the base package without dependencies to the "generator" or "ORM" package.

I also would like to use any combination of all 3 packages.

How would you implement this?

Duplicating the object hierarchy in every package will prevent a mixed usage.

A Decorator

Mixins etc. and AOP are not supported. And extending the class at runtime will lose any type safety.

I'm getting closer to the point thinking that a switch per package is the cleaner approach assuming that there will be "no" new Types in the future.

Aucun commentaire:

Enregistrer un commentaire