Salut !
Si ton projet est très orienté clean architecture, Je te conseille de te renseigner beaucoup sur ce projet.
Certains concepts de la clean architecture ne sont pas implémentable en JS, notament à cause de la structure en Interface. Typescript est nécessaire dasn ce cas
Cependant, si ton projet est de faire un simple système imbriqué, je te conseille de faire une Classe par action, (par exemple une classe par entité, une classe par repository pour query tes entités), et ensuite, tu défini un système de storage dans ton repository qui serait simplement une classe et un stockage non persistant in memory.
Ca donerait un truc du genre :
entities/work-unit.entity.js qui contient la classe WorkUnit, avec en propriétés ses champs, optionnels ou non.
entities/team.entity.js qui contient ta classe Team
repositories/work-uint.repository.js qui contient ta logique de stockage et de récupération des WorkUnit. Ton repo contient :
- Un storage, donc un simple tableau contenant des objets WorkUnit
- une fonction validate qui valide la structure de ton entité (présence des champs obligatoires)
- une fonction getAll(options) qui te renvoit les WorkUnits. options est un objet qui peut contenir {actif: true, capacity: 10} pour filtrer tes resultats. les options seront optionnelles
- une fonction getById qui te renvoit une seule WorkUnit.
- une fonction addNew(workUnit) qui ajoute une nouvelle unité
- une fonction delete(workUnitId) qui supprime une workUnit définie
- et ainsi de suite, suivant les usecases.
Tu fais la même chose pour le repository de l'entité Team
Ainsi, chacune des règle que tu implémente dans ton repository est indépendante du DBMS que tu utilise, ou même sans UI. Tu peux dailleurs tester facilement :
Tu instancie un repository, tu ajoute une entité et tu vérifie si elle est bien entrée dans ton stockage non persistant (tableau de WorkUnit)
Voilà, maintenant let's work ;)