{"id":25,"date":"2025-10-06T09:49:22","date_gmt":"2025-10-06T09:49:22","guid":{"rendered":"https:\/\/docs.pedagotchi.de\/?post_type=docs&#038;p=25"},"modified":"2025-10-07T15:00:03","modified_gmt":"2025-10-07T15:00:03","password":"","slug":"zentraler-provider","status":"publish","type":"docs","link":"https:\/\/docs.pedagotchi.de\/index.php\/docs\/zentraler-provider\/","title":{"rendered":"Zentraler Provider"},"content":{"rendered":"\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p class=\"wp-block-paragraph\">Der\u00a0ContextControllerProvider\u00a0ist der zentrale Einstiegspunkt, der eine stabile, einmalige Controller-Instanz erstellt, Navigation integriert, den App-Status gated und so eine saubere Trennung zwischen UI und Dom\u00e4nenlogik erm\u00f6glicht. Diese Struktur erleichtert Erweiterbarkeit, Testbarkeit und konsistente App-weite Verhaltensweisen.<\/p>\n<\/blockquote>\n\n\n\n<h2 class=\"wp-block-heading\">Zweck<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Der\u00a0ContextControllerProvider\u00a0stellt eine einzige, gemeinsam genutzte Controller-Instanz bereit, die Module, Routen und Navigation orchestriert.<\/li>\n\n\n\n<li>Routing, Modulkonfiguration und Statusverwaltung werden zentral initialisiert und allen Screens\/Komponenten verf\u00fcgbar gemacht.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Ort im Code<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Provider-Datei:\u00a0providers\/ContextControllerProvider.tsx<\/li>\n\n\n\n<li>Controller-Quelle:\u00a0<code>ContextController<\/code>\u00a0aus dem Paket\u00a0<code>context<\/code><\/li>\n\n\n\n<li>Konfigurationen:\u00a0<code>@configs\/routeConfig<\/code>\u00a0(Routenbeschreibung),\u00a0<code>@configs\/moduleConfig<\/code>\u00a0(Modulkonfiguration)<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Funktionsweise<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Context-Erzeugung und Instanzhaltung per\u00a0<code>useRef<\/code>:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>if (!controllerRef.current) {\n  controllerRef.current = new Controller(moduleConfig,     routeConfig, routerFunctions);\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Router-Integration via Expo Router (<code>useRouter()<\/code>), als einfache Funktionssammlung injiziert:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>const routerFunctions = {\n  push: (path: any, params: any) => router.push(path, params),\n  replace: (path: any, params: any) => router.replace(path, params),\n};<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Lade-Gating verhindert fr\u00fches Rendern ohne initialisierte Ressourcen:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>\nif (!controller || !controller.loaded) {\n  return &lt;>&lt;\/>;\n}<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Bereitstellung der Instanz \u00fcber den Context:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;ContextController.Provider value={controller}>\n  {children}\n&lt;\/ContextController.Provider><\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\">Verwendungsrichtlinie<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Zugriff in Komponenten\/Seiten \u00fcber den Hook:<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>const { modules, routeController, loaded } = useContextControllerProvider();<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Vor sensiblen Zugriffen (Navigation, Stores) optional\u00a0<code>loaded<\/code>\u00a0pr\u00fcfen.<\/li>\n\n\n\n<li>Navigation m\u00f6glichst \u00fcber Controller\/Helper (z. B.\u00a0<code>routeController.navigateToNext(...)<\/code>), damit zentrale Logik greift.<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\">Vorteile des Ansatzes<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Single Source of Truth: genau eine Controller-Instanz f\u00fcr die gesamte App.<\/li>\n\n\n\n<li>Konsistente Navigation: einheitliche Routenwechsel-Logik \u00fcber injizierte\u00a0<code>routerFunctions<\/code>.<\/li>\n\n\n\n<li>Klare Initialisierungsphase: kein Flickern\/Fehler dank\u00a0<code>loaded<\/code>-Gating.<\/li>\n\n\n\n<li>Lose Kopplung: UI bleibt schlank; Dom\u00e4nenlogik und Navigation liegen zentral im Controller.<\/li>\n<\/ul>\n","protected":false},"excerpt":{"rendered":"<p>Der\u00a0ContextControllerProvider\u00a0ist der zentrale Einstiegspunkt, der eine stabile, einmalige Controller-Instanz erstellt, Navigation integriert, den App-Status gated und so eine saubere Trennung zwischen UI und Dom\u00e4nenlogik erm\u00f6glicht. Diese Struktur erleichtert Erweiterbarkeit, Testbarkeit und konsistente App-weite Verhaltensweisen. Zweck Ort im Code Funktionsweise Verwendungsrichtlinie Vorteile des Ansatzes<\/p>\n","protected":false},"author":2,"featured_media":0,"comment_status":"open","ping_status":"closed","template":"","meta":{"footnotes":""},"doc_category":[4],"doc_tag":[],"class_list":["post-25","docs","type-docs","status-publish","hentry","doc_category-architekturueberblick"],"year_month":"2026-05","word_count":241,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"jon","author_nicename":"jon","author_url":"https:\/\/docs.pedagotchi.de\/index.php\/author\/jon\/"},"doc_category_info":[{"term_name":"Architektur\u00fcberblick","term_url":"https:\/\/docs.pedagotchi.de\/index.php\/docs-category\/architekturueberblick\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/docs\/25","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/comments?post=25"}],"version-history":[{"count":2,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/docs\/25\/revisions"}],"predecessor-version":[{"id":68,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/docs\/25\/revisions\/68"}],"wp:attachment":[{"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/media?parent=25"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/doc_category?post=25"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/docs.pedagotchi.de\/index.php\/wp-json\/wp\/v2\/doc_tag?post=25"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}