mercredi 3 février 2021

Design Pattern for versioning data objects in PHP Rest API

I'm just thinking of API versioning data objects. Let's say you have an object car, which looks like this in version 1 (directory v1):

class Car {
  protected $color;
  protected $brand;
  protected $price;
  protected $custom;

  // getters and setters
}

In version 2, the data object changes (directory v2, $custom removed, added new property $exhaust):

class Car {
  protected $color;
  protected $brand;
  protected $price;
  protected $exhaust;

  // getters and setters
}

We thought of making a "mapper" class, so that we are able to work with different versions in the business logic, e.g.:

Class CarMapper extends Mapper
{
  // needs to have all member variables from all versions
  protected $color;
  protected $brand;
  protected $price;
  protected $custom;
  protected $exhaust;

  public function out($object) 
  {
    $mapperObj = new self();

    // you need to do this for each version of a data object and
    // prepare the mapperObj according the members of the object for
    // this version
    if ($object instanceof CarV1) {
      $mapperObj->color   = $object->color;
      ...
    }
    return mapperObj;
  }
}

I think this approach will lead a "bloated" Mapper class and I thought there might be a better solution using a design pattern. Could we use a factory pattern here?

Aucun commentaire:

Enregistrer un commentaire