3.1.0 β’ Published 6 months ago
@codelytv/primitives-type v3.1.0
π Usage example
You can have a domain entity such as the following Course:
import { CourseId } from "./CourseId";
import { CourseTitle } from "./CourseTitle";
export class Course {
constructor(public courseId: CourseId, public courseTitle: CourseTitle) {}
updateTitle(newCourseTitle: CourseTitle): void {
this.courseTitle = newCourseTitle;
}
someOtherMethodWithDomainLogic(): void {
// some algorithm
}
}When we want to have a toPrimitives method in order to pass an instance of the Course class between architectural layers, so the thing we want pass around should be to serialized/marshalled in a way that only containings primitive values such as:
{
"courseId": "25658f31-2da1-4942-8b58-88aeacc79860",
"courseTitle": "π TypeScript Avanzado: MΓ‘s allΓ‘ de any"
}That is:
- We want to avoid including methods such as the
thisFunctionShouldNotBeIncludedInTheToPrimitivesone, so the transformation should only include properties. - We want to flatten or unwrap encapsulated properties such as the
courseIdandcourseTitleones. They are modeled as Value Objects (CourseIdandCourseTitleclasses), so the transformation or flatten should only include properties in a recursive manner.
That is exactly what our Primitives<T> utility type guarantees. Let's add it! πͺ
import { Primitives } from "@codelytv/primitives-type";
import { CourseId } from "./CourseId";
import { CourseTitle } from "./CourseTitle";
export class Course {
constructor(public courseId: CourseId, public courseTitle: CourseTitle) {}
updateTitle(newCourseTitle: CourseTitle): void {
this.courseTitle = newCourseTitle;
}
someOtherMethodWithDomainLogic(): void {
// some algorithm
}
toPrimitives(): Primitives<Course> {
return {
courseId: this.courseId.value,
courseTitle: this.courseTitle.value,
};
}
}Done! βοΈ
The Primitives<Course> return type is ensuring all our restrictions in a very straightforward way! π
π How to install
- Npm:
npm install --save-dev @codelytv/primitives-type - Yarn:
yarn add -D @codelytv/primitives-type
πΒ Codely Code Quality Standards
Publishing this package we are committing ourselves to the following code quality standards:
- π€ Respect Semantic Versioning: No breaking changes in patch or minor versions
- π€Β No surprises in transitive dependencies: Use the bare minimum dependencies needed to meet the purpose
- π―Β One specific purpose to meet without having to carry a bunch of unnecessary other utilities
- β Β Tests as documentation and usage examples
- π Well documented ReadMe showing how to install and use
- βοΈ License favoring Open Source and collaboration
π Related utilities and resources
βοΈ Learning resources
- π TypeScript Avanzado: MΓ‘s allΓ‘ de any (Spanish - Course)
- π DDD en TypeScript: Estructura de carpetas (Spanish - YouTube video)
- π Domain-Driven Design en TypeScript (Spanish - Course)
- π₯ JavaScript moderno: Buenas prΓ‘cticas para empezar y refactorizar aplicaciones (Spanish - Course)
- ποΈ De JavaScript a TypeScript (Spanish - Course)
π· TypeScript skeletons
- π± TypeScript Basic Skeleton: Bootstrap your new TypeScript frontend project
- π TypeScript API Skeleton: Bootstrap your new TypeScript backend project
π TypeScript Domain-Driven Design repositories
- β¨ TypeScript DDD Skeleton: Bootstrap your new TypeScript projects applying Hexagonal Architecture and Domain-Driven Design patterns
- π TypeScript DDD Course: Learn Domain-Driven Design in TS lesson by lesson
- π― TypeScript DDD Example: Complete project applying Hexagonal Architecture and Domain-Driven Design patterns