The Object est un projet que j’ai entrepris en 2022 sans chercher à répondre à un besoin métier particulier, puisque l’intention initiale était avant tout pédagogique et orientée vers l’expérimentation. Je l’ai conçu comme un framework destiné principalement à des usages de prototypage, afin d’explorer de manière concrète la conception, le développement et l’industrialisation d’une application, tout en me donnant un cadre de travail structuré pour analyser les décisions techniques, leurs conséquences, et les compromis qu’elles impliquent.
Pour poser une base solide et cohérente, j’ai fait le choix d’une pile technique centrée sur TypeScript et l’écosystème JavaScript, avec MySQL pour la gestion des bases de données, TypeORM comme couche de mapping et d’accès aux données côté Node.js, et React pour la conception des composants d’interface et d’expérience utilisateur. Ce choix vise à conserver une continuité de langage et de paradigmes entre les différentes couches, tout en s’appuyant sur des outils largement utilisés qui facilitent la mise en œuvre d’une architecture CRUD classique, la manipulation d’entités persistées, et la construction d’interfaces modulaires.
À ce stade, le cœur du travail a surtout porté sur la définition d’une structure de données représentant un “objet” au sens de source de vérité, ainsi que sur la mise en place d’un algorithme capable d’analyser cette structure pour produire automatiquement des éléments techniques exploitables. Cet algorithme a pour objectif de générer les entités de type ORM afin de permettre l’interaction avec la base de données, de participer à la génération ou à l’initialisation du schéma, et de fournir les fondations nécessaires à l’exposition d’une API CRUD au travers d’endpoints capables de manipuler les ressources décrites par le schéma. Même si le niveau d’avancement est déjà significatif, le projet reste en évolution et des erreurs surviennent encore, ce qui implique une phase de stabilisation continue, autant sur la génération de code que sur la fiabilité des artefacts produits et leur compatibilité avec les contraintes réelles de la base de données et des flux API. Dans une logique d’amélioration et de sécurisation, l’un des chantiers identifiés comme prioritaire concerne la mise en place d’un chiffrement de bout en bout pour protéger les données. L’objectif est d’éviter que la sécurisation repose uniquement sur la couche transport ou sur des contrôles applicatifs classiques, et de renforcer la confidentialité des données sensibles en prévoyant une stratégie de chiffrement qui soit compatible avec l’architecture générée, avec les accès CRUD, et avec les contraintes d’exploitation. Cette évolution nécessite de définir précisément ce qui doit être chiffré, où le chiffrement et le déchiffrement doivent avoir lieu, comment les clés sont générées, stockées, renouvelées et protégées, et comment les opérations de recherche, d’indexation ou de filtrage sont gérées lorsque certaines données ne sont plus lisibles en clair dans la base.
Une fois ces améliorations apportées, l’étape suivante consiste à faire évoluer l’algorithme de génération pour qu’il ne se limite plus à la couche données et à l’API, mais qu’il produise également des composants React d’interface et d’expérience utilisateur à partir du schéma de l’objet. L’idée est que la description de l’objet devienne une source de vérité transversale capable de dicter non seulement la structure des entités et des endpoints, mais aussi la structure des formulaires, des vues, des composants de consultation et d’édition, ainsi que les comportements attendus en front-end. Dans cette perspective, la génération ne se limite pas à produire de l’UI statique, puisqu’elle vise aussi à relier automatiquement les composants aux endpoints pertinents lorsque la nécessité existe, afin de réduire les tâches répétitives, de limiter les incohérences entre front-end et back-end, et de conserver une logique d’ensemble unifiée.
Dans la continuité de cette démarche, je vise ensuite une intégration de The Object au sein de Next.js afin de faciliter le développement d’applications complètes à partir d’un socle de composants déjà définis et prêts à l’emploi. Cette intégration a pour ambition d’apporter une expérience de développement plus fluide, avec une cohérence UX et UI maintenue d’un composant à l’autre, une structuration homogène du projet, et une capacité à tirer parti des atouts de Next.js selon les besoins, notamment en matière de routage, de rendu, et d’organisation applicative. L’objectif général est de disposer d’un ensemble unifié où la génération, l’assemblage et l’utilisation des composants s’inscrivent dans une convention claire, afin que l’application résultante reste lisible, maintenable et cohérente, même lorsque le périmètre fonctionnel s’étend.
Parallèlement à la génération des couches techniques, je souhaite intégrer une dimension de qualité et d’industrialisation en automatisant la génération de différents types de tests, comme des tests unitaires, des tests d’intégrité et des tests d’intégration, afin d’assurer un bon fonctionnement de l’application et de sécuriser les évolutions. Cette approche a aussi une finalité pédagogique, car elle permet d’expliciter le rôle de chaque niveau de test, de mettre en évidence les points de fragilité d’une architecture générée, et d’introduire des garde-fous pour prévenir les régressions. L’automatisation des tests s’inscrit ainsi dans une logique plus large où la production du code ne constitue pas une fin en soi, mais où la fiabilité, la traçabilité des changements, et la validation du comportement deviennent des éléments aussi structurants que la génération des entités et des endpoints.
L’intérêt du projet réside aussi dans sa capacité à m’aider à m’organiser, puisque le fait de partir d’un objet de référence et de chercher à automatiser un processus complet me pousse à identifier les besoins, à les formuler clairement, à prioriser les chantiers, et à établir une roadmap fondée sur des dépendances réelles. Le projet sert ainsi de support de gestion de projet, car il oblige à clarifier ce qui doit être standardisé, ce qui doit rester extensible, ce qui relève d’une convention, et ce qui doit être configurable, tout en donnant une visibilité précise sur l’avancement et sur les prochaines étapes nécessaires pour atteindre un niveau d’industrialisation satisfaisant.
Cette ambition implique toutefois des risques qu’il est important d’anticiper dès maintenant, car ils peuvent impacter la sécurité, la maintenabilité et la stabilité du framework. Il existe un risque de sécurité si le chiffrement de bout en bout est mal conçu, notamment en cas de mauvaise gestion des clés, de stockage ou de manipulation insuffisamment protégée, ou de choix cryptographiques inadaptés, ce qui pourrait créer une illusion de protection tout en laissant des failles exploitables. Il existe également un risque de perte de données ou de corruption de schéma lorsque la génération et les migrations ne sont pas strictement maîtrisées, puisque des modifications automatiques non réversibles, des contraintes mal définies ou des changements de types peuvent provoquer des incohérences difficiles à rattraper, surtout lorsque le projet sort du cadre du prototype. Un autre risque important concerne la dette technique, car un code généré qui n’est pas suffisamment idiomatique, configurable ou lisible peut devenir plus difficile à maintenir que du code écrit manuellement, ce qui impose d’intégrer des conventions strictes, des validations, et une stratégie de versionnement des artefacts générés. Il existe aussi un risque d’incohérence entre le front-end et le back-end si la source de vérité n’est pas rigoureusement unique et si des divergences apparaissent entre le schéma, l’API et les composants, ce qui peut conduire à des comportements inattendus et à une complexité accrue lors du débogage. Enfin, il faut considérer des risques de performance et de scalabilité, car des requêtes générées de manière naïve, des relations mal optimisées, ou des patterns de chargement non maîtrisés peuvent créer des problèmes de latence ou de consommation de ressources, et ces problèmes deviennent généralement visibles précisément au moment où l’on cherche à industrialiser. Dans ce contexte, l’objectif de The Object peut se résumer comme une démarche globale qui vise à comprendre et à automatiser, autant que possible, le cycle de vie complet d’une application, depuis la conception et la modélisation, jusqu’à la génération du code, la structuration de l’interface, l’intégration dans un framework moderne, et la mise en place de garanties de qualité par le test. En partant d’un objet unique, je cherche à créer un processus automatisé et cohérent qui permette à la fois de produire rapidement des prototypes, d’apprendre de manière structurée, et de construire progressivement une base suffisamment robuste pour évoluer vers des usages plus exigeants, à condition de traiter méthodiquement la stabilisation, la sécurité, et la qualité du code généré.