From 41438ef289def237a8f6bd660d5104ed8e773348 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Yannick=20Debr=C3=A9e?= Date: Thu, 7 Sep 2023 13:27:23 +0200 Subject: [PATCH] Implementation of Single Responsibility Principle --- src/application.ts | 9 +++++++-- src/article.json.factory.ts | 10 ++++++++++ src/article.repository.ts | 10 ++++++++++ src/article.ts | 18 ++---------------- src/types.ts | 3 +++ 5 files changed, 32 insertions(+), 18 deletions(-) create mode 100644 src/article.json.factory.ts create mode 100644 src/article.repository.ts create mode 100644 src/types.ts diff --git a/src/application.ts b/src/application.ts index ae9f1e2..a8ade52 100644 --- a/src/application.ts +++ b/src/application.ts @@ -1,13 +1,18 @@ import Article from './article'; +import ArticleJsonFactory from './article.json.factory'; +import ArticleRepository from './article.repository'; +import Database from './database'; export default class Application { run(): number { try { + const database = new Database(); + const articleRepository = new ArticleRepository(database); const article = new Article('Mon premier article'); - article.saveInDatabase(); + articleRepository.save(article); - const json = article.exportToJson(); + const json = ArticleJsonFactory.createFromArticle(article); console.log('Mon JSON à renvoyer depuis mon API : ', json); return 0; diff --git a/src/article.json.factory.ts b/src/article.json.factory.ts new file mode 100644 index 0000000..feab802 --- /dev/null +++ b/src/article.json.factory.ts @@ -0,0 +1,10 @@ +import Article from './article'; +import { ArticleJson } from './types'; + +export default class ArticleJsonFactory { + static createFromArticle(article: Article): ArticleJson { + return { + title: article.getTitle(), + }; + } +} diff --git a/src/article.repository.ts b/src/article.repository.ts new file mode 100644 index 0000000..b39e13e --- /dev/null +++ b/src/article.repository.ts @@ -0,0 +1,10 @@ +import Article from './article'; +import Database from './database'; + +export default class ArticleRepository { + constructor(private database: Database) {} + + save(article: Article): void { + this.database.save({ title: article.getTitle() }, 'articles'); + } +} diff --git a/src/article.ts b/src/article.ts index f052d9b..03c8353 100644 --- a/src/article.ts +++ b/src/article.ts @@ -1,21 +1,7 @@ -import Database from './database'; - -type ArticleJson = { - title: string; -}; - export default class Article { constructor(private title: string) {} - private database = new Database(); - - saveInDatabase(): void { - this.database.save({ title: this.title }, 'articles'); - } - - exportToJson(): ArticleJson { - return { - title: this.title, - }; + getTitle(): string { + return this.title; } } diff --git a/src/types.ts b/src/types.ts new file mode 100644 index 0000000..71c3874 --- /dev/null +++ b/src/types.ts @@ -0,0 +1,3 @@ +export type ArticleJson = { + title: string; +};