Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Building the layered server application achieve...

Sponsored · SiteGround - Reliable hosting with speed, security, and support you can count on.
Avatar for OKUNOKENTARO OKUNOKENTARO
December 01, 2019

Building the layered server application achieved by InversifyJS

The slide that used when I talked in JSConf JP.

Avatar for OKUNOKENTARO

OKUNOKENTARO

December 01, 2019
Tweet

More Decks by OKUNOKENTARO

Other Decks in Technology

Transcript

  1. PS

  2. function makeUserId(): UserId { return new UserId(uuid()); } function makeUserIdMock(mockValue:

    string): UserId { return new UserId(mockValue); } class UserId { constructor(readonly value: string) {} } #FUUFS
  3. class UsersGetMediator { async handle(req: Request, res: Response) { const

    repo = new UsersRepository( new DatabaseProvider(), ); const users = await repo.getAll(); // Processing to send response } } )NNN
  4. class Application { private router: Router; constructor() { this.router =

    new Router( new UsersGetMediator( new UsersRepository( new DatabaseProvider(), ) ) ) } } :PVLOPX
  5. class Application { private router: Router; constructor() { this.router =

    new Router( new UsersGetMediator( new UsersRepository( new DatabaseProvider(), ) ) ) } } )!%0,&/
  6. import { injectable } from 'inversify'; @injectable() export class Application

    { constructor( private readonly auth: AuthService, private readonly router: Router, private readonly express: ExpressProvider, ) {} main() { this.auth.prepare(); this.router.prepare(); this.express.listen(); } } *OKFDUBCMFEFDPSBUPS
  7. @injectable() export class UsersGetMediator { constructor( private readonly auth: AuthService,

    private readonly permissionVerifier: PermissionVerifier, private readonly errorHandler: ErrorHandler, private readonly usersRepo: UsersRepository, ) {} async handle(req: Request, res: Response) { if (!(await this.auth.isAuthenticated(req))) { return this.errorHandler.unauthorized(res); } if (!(await this.permissionVerifier.canReadUsers(req.user.id))) { return this.errorHandler.forbidden(res); } const users = await this.usersRepo.getAll(); const body: UsersGetResponse = { users: users.serialize(), }; res.send(body).end(); } }
  8. +4$POG+1 Express Http Handler (Router) Google Cloud SQL Mediator Repository

    Database Provider Reader Writer Http Request (Not TS) Domain model Data access object Knex.js ORM Raw SQL Query (Not TS)
  9. +4$POG+1 Express Http Handler (Router) Google Cloud SQL Mediator Repository

    Database Provider Reader Writer Serialized JSON (Not TS) Domain model Data transfer object Results as JSON (Not TS)