Skip to content

Instantly share code, notes, and snippets.

@jooeycheng
Last active June 24, 2020 04:03
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jooeycheng/da75854782182a2cea43f7c00adf62f9 to your computer and use it in GitHub Desktop.
Save jooeycheng/da75854782182a2cea43f7c00adf62f9 to your computer and use it in GitHub Desktop.
TypeScript Function vs Class approach

Class

export class OrderCreationValidator {
  validateParams (params: OrderCreationParams) {
    this.validateAccountId(params)
    this.validateSku(params)
  }

  private validateAccountId(params: OrderCreationParams) {
    const accountId = normalizeString(params.accountId)

    if (accountId == '') {
      throw new ParameterInvalidError('accountId cannot be blank')
    }
  }

  private validateSku(params: OrderCreationParams) {
    const { sku, externalSku } = params
    if (sku) {
      validateStringLength('sku', sku, 30)
    } else if (externalSku) {
      validateStringLength('externalSku', externalSku, 100)
    } else {
      throw new ParameterInvalidError('sku or externalSku cannot be blank, at least one is required')
    }
  }
}

const validator = new OrderCreationValidator()

Function

export interface OrderCreationValidator {
  validateParams(params: OrderCreationParams): boolean
}

export function OrderCreationValidator() {
  function validateParams(params: OrderCreationParams) {
    validateAccountId(params)
    validateSku(params)
  }

  const validateAccountId = function(params: OrderCreationParams) {
    const accountId = normalizeString(params.accountId)

    if (accountId == '') {
      throw new ParameterInvalidError('accountId cannot be blank')
    }
  }

  const validateSku = function(params: OrderCreationParams) {
    const { sku, externalSku } = params
    if (sku) {
      validateStringLength('sku', sku, 30)
    } else if (externalSku) {
      validateStringLength('externalSku', externalSku, 100)
    } else {
      throw new ParameterInvalidError('sku or externalSku cannot be blank, at least one is required')
    }
  }

  return {
    validateParams,
  }
}
  
const validator = OrderCreationValidator()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment