✔️
types-ddd
  • Introduction
  • Result
    • ok
    • success
    • fail
    • combine
  • UniqueEntityID
  • BaseDomainEntity
  • ValueObject
  • Entity
  • AggregateRoot
    • IHandle
    • IDomainEvent
    • DomainEvents
  • WriteList
    • ReadList
  • IUseCase
  • IBaseConnection
  • BaseRepository
  • IRepository
  • Filter
  • IMapper
  • Utils
    • SpecificationComposite
    • ChangesObserver
Powered by GitBook
On this page

Was this helpful?

BaseDomainEntity

Abstract class to extends your entity props

It's an abstract class that simply provides some standard attributes to your entity through props interface.

 * @abstract BaseDomainEntity

 * @property ID:DomainId
 * @property createdAt:Date
 * @property updatedAt:Date
 * @property isDeleted:Boolean
 * @property deletedAt:Date | undefined

The example, lets create a car with only two attributes colorand year

import { 
  BaseDomainEntity, 
  Entity, 
  UniqueEntityID, 
  Result 
} from 'types-ddd';

interface CarProps extends BaseDomainEntity {
  year: number;
  color: string;
}

class Car extends Entity<CarProps> {
  private constructor(props: CarProps, Car.name) {
    super (props, id)
  }
  
  get year (): number {
    return this.props.year;
  }
  
  get color (): string {
    return this.props.color;
  }
  
  public static create (props: CarProps): Result<Car> {
    return Result.ok<Car>(new Car(props));
  }
}

const car = Car.create({ 
  ID: DomainId.create(),
  year: 2021, 
  color: 'red' 
}).getResult();
Accessible attributes for car
> car.color
> car.createdAt
> car.deletedAt
> car.equals
> car.id
> car.isDeleted
> car.updatedAt
> car.year
> car.getHashCode
PreviousUniqueEntityIDNextValueObject

Last updated 3 years ago

Was this helpful?