Skip to content

Refactoring: Use plain old javascript objects as data models #34

Open
@reva2

Description

@reva2

In current implementation data models highly coupled with data storage. I think it will be better if we will use POJO augmented with decorators for data models. I.e. all methods that change data in underlying storage (currently, save()) should be moved from JsonApiModel to JsonApiDataStore.

Typical interaction with data storage can look like:

// create record
let author = new AuthorModel();
storage.saveRecord(author);

// updating record
storage.findRecord(BookModel, '1').subscribe(
  (book) => {
    book.title = "New title";
    storage.saveRecord(book);
  }
);

// deleting record
storage.findRecord(BookModel, '1').subscribe(
  (book) => storage.deleteRecord(book);
);

This approach have following advantages:

storage.beginTransaction();

/* posts: BlogPostModel[] */
posts.forEach((post) => {
  post.published = true;
  storage.saveRecord(post);  // request will be delayed because of transaction
});

storage.commit(); // update all posts in underlying storage using single request

Metadata

Metadata

Assignees

No one assigned

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions