mirror of
https://github.com/johndoe6345789/low-code-react-app-b.git
synced 2026-04-24 21:54:56 +00:00
373 lines
20 KiB
Markdown
373 lines
20 KiB
Markdown
# Architecture Visual Guide
|
|
|
|
## System Architecture Diagram
|
|
|
|
```
|
|
┌────────────────────────────────────────────────────────────────────────┐
|
|
│ CODEFORGE APPLICATION │
|
|
│ │
|
|
│ ┌──────────────────────────────────────────────────────────────────┐ │
|
|
│ │ PRESENTATION LAYER │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
|
│ │ │ React │ │ Existing │ │ JSON-Driven │ │ │
|
|
│ │ │ Components │ │ Components │ │ Pages │ │ │
|
|
│ │ │ (<150 LOC) │ │ (Migrating) │ │ (New) │ │ │
|
|
│ │ └──────┬───────┘ └──────┬───────┘ └──────┬───────┘ │ │
|
|
│ └─────────┼──────────────────┼──────────────────┼────────────────┘ │
|
|
│ │ │ │ │
|
|
│ ┌─────────▼──────────────────▼──────────────────▼────────────────┐ │
|
|
│ │ ORCHESTRATION LAYER │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────────────┐ ┌─────────────────────────┐ │ │
|
|
│ │ │ PageRenderer │◄────────┤ JSON Page Schemas │ │ │
|
|
│ │ │ - Interprets │ │ - Structure │ │ │
|
|
│ │ │ schemas │ │ - Data sources │ │ │
|
|
│ │ │ - Renders │ │ - Actions │ │ │
|
|
│ │ │ components │ │ - Components │ │ │
|
|
│ │ └────────┬─────────┘ └─────────────────────────┘ │ │
|
|
│ │ │ │ │
|
|
│ │ ┌────────▼──────────┐ ┌───────────────┐ ┌─────────────┐ │ │
|
|
│ │ │ Component │ │ Action │ │ Data Source│ │ │
|
|
│ │ │ Registry │ │ Executor │ │ Manager │ │ │
|
|
│ │ │ - Lookup │ │ - Execute │ │ - KV store │ │ │
|
|
│ │ │ - Resolution │ │ - Navigate │ │ - API calls│ │ │
|
|
│ │ └───────────────────┘ └───────────────┘ └─────────────┘ │ │
|
|
│ └────────────────────────────────────────────────────────────┘ │
|
|
│ │ │ │ │
|
|
│ ┌─────────▼──────────────────▼──────────────────▼─────────────┐ │
|
|
│ │ BUSINESS LOGIC LAYER │ │
|
|
│ │ (Hook Library) │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
|
│ │ │ Data Hooks │ │ UI Hooks │ │ Form Hooks │ │ │
|
|
│ │ ├──────────────┤ ├──────────────┤ ├──────────────┤ │ │
|
|
│ │ │ useArray │ │ useDialog │ │ useForm │ │ │
|
|
│ │ │ useCRUD │ │ useTabs │ │ useFormField │ │ │
|
|
│ │ │ useSearch │ │ useSelection │ │ │ │ │
|
|
│ │ │ useSort │ │ useClipboard │ │ │ │ │
|
|
│ │ │ usePagination│ │ │ │ │ │ │
|
|
│ │ │ useDebounce │ │ │ │ │ │ │
|
|
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────────────────────────────────────────────────┐ │ │
|
|
│ │ │ Feature-Specific Hooks │ │ │
|
|
│ │ ├──────────────────────────────────────────────────────┤ │ │
|
|
│ │ │ use-feature-ideas, use-idea-groups, │ │ │
|
|
│ │ │ use-idea-connections, use-node-positions, etc. │ │ │
|
|
│ │ └──────────────────────────────────────────────────────┘ │ │
|
|
│ └────────────────────────────────────────────────────────────┘ │
|
|
│ │ │
|
|
│ ┌─────────▼─────────────────────────────────────────────────┐ │
|
|
│ │ RUNTIME/PLATFORM LAYER │ │
|
|
│ │ │ │
|
|
│ │ ┌──────────────┐ ┌──────────────┐ ┌──────────────┐ │ │
|
|
│ │ │ Spark KV │ │ Spark LLM │ │ Spark User │ │ │
|
|
│ │ │ Storage │ │ API │ │ API │ │ │
|
|
│ │ └──────────────┘ └──────────────┘ └──────────────┘ │ │
|
|
│ └───────────────────────────────────────────────────────────┘ │
|
|
└────────────────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Data Flow Diagram
|
|
|
|
### Traditional React Component Flow
|
|
```
|
|
User Action
|
|
│
|
|
▼
|
|
Component State
|
|
│
|
|
▼
|
|
Inline Logic
|
|
│
|
|
▼
|
|
Direct KV Access
|
|
│
|
|
▼
|
|
UI Update
|
|
```
|
|
|
|
### New Hook-Based Flow
|
|
```
|
|
User Action
|
|
│
|
|
▼
|
|
Component (Presentation Only)
|
|
│
|
|
▼
|
|
Custom Hook
|
|
│
|
|
├──► Business Logic
|
|
├──► Data Management
|
|
├──► State Updates
|
|
└──► Side Effects
|
|
│
|
|
▼
|
|
Spark KV/API
|
|
│
|
|
▼
|
|
UI Update
|
|
```
|
|
|
|
### JSON-Orchestrated Flow
|
|
```
|
|
JSON Schema Definition
|
|
│
|
|
├──► Data Sources
|
|
│ │
|
|
│ ▼
|
|
│ KV Store / API
|
|
│
|
|
├──► Component Tree
|
|
│ │
|
|
│ ▼
|
|
│ Component Registry
|
|
│ │
|
|
│ ▼
|
|
│ React Components
|
|
│
|
|
├──► Actions
|
|
│ │
|
|
│ ▼
|
|
│ Action Executor
|
|
│ │
|
|
│ ▼
|
|
│ Data Updates
|
|
│
|
|
└──► PageRenderer
|
|
│
|
|
▼
|
|
Final UI
|
|
```
|
|
|
|
## Component Lifecycle
|
|
|
|
### Before Refactoring
|
|
```
|
|
┌─────────────────────────────────────┐
|
|
│ Large Component (500+ LOC) │
|
|
│ │
|
|
│ • Business Logic │
|
|
│ • State Management │
|
|
│ • Data Fetching │
|
|
│ • Validation │
|
|
│ • UI Rendering │
|
|
│ • Event Handlers │
|
|
│ • Side Effects │
|
|
│ │
|
|
│ ❌ Hard to test │
|
|
│ ❌ Hard to reuse │
|
|
│ ❌ Hard to maintain │
|
|
└─────────────────────────────────────┘
|
|
```
|
|
|
|
### After Refactoring
|
|
```
|
|
┌─────────────────────┐ ┌─────────────────────┐
|
|
│ Custom Hook │ │ Small Component │
|
|
│ (Business Logic) │────►│ (Presentation) │
|
|
│ │ │ │
|
|
│ • Data Management │ │ • UI Only │
|
|
│ • State Logic │ │ • Props/Events │
|
|
│ • API Calls │ │ • Styling │
|
|
│ • Validation │ │ • < 150 LOC │
|
|
│ • < 150 LOC │ │ │
|
|
│ │ │ ✅ Easy to test │
|
|
│ ✅ Reusable │ │ ✅ Readable │
|
|
│ ✅ Testable │ │ ✅ Maintainable │
|
|
└─────────────────────┘ └─────────────────────┘
|
|
```
|
|
|
|
## Hook Composition Pattern
|
|
|
|
```
|
|
┌──────────────────────────────────────────────────┐
|
|
│ useProductManager() │
|
|
│ │
|
|
│ ┌──────────────┐ ┌──────────────┐ │
|
|
│ │ useArray │ │ useSearch │ │
|
|
│ │ (products) │──┤ (by name) │ │
|
|
│ └──────┬───────┘ └──────┬───────┘ │
|
|
│ │ │ │
|
|
│ ▼ ▼ │
|
|
│ ┌─────────────────────────────┐ │
|
|
│ │ useSort │ │
|
|
│ │ (by price/name) │ │
|
|
│ └──────────────┬──────────────┘ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ ┌─────────────────────────────┐ │
|
|
│ │ usePagination │ │
|
|
│ │ (10 items/page) │ │
|
|
│ └─────────────┬───────────────┘ │
|
|
│ │ │
|
|
│ ▼ │
|
|
│ Final Result Set │
|
|
└──────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## JSON Page Rendering Flow
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────────┐
|
|
│ JSON Page Schema │
|
|
│ { │
|
|
│ id, name, description, │
|
|
│ layout, components, dataSources, actions │
|
|
│ } │
|
|
└───────────────────┬─────────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌───────────────────────┐
|
|
│ Schema Validator │
|
|
│ (Zod validation) │
|
|
└───────────┬───────────┘
|
|
│
|
|
▼
|
|
┌───────────────────────┐
|
|
│ PageRenderer │
|
|
│ (Orchestrator) │
|
|
└───────────┬───────────┘
|
|
│
|
|
┌───────────┼───────────┐
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
│ Data │ │ Actions │ │ Comps │
|
|
│ Sources │ │ Setup │ │ Render │
|
|
└────┬────┘ └────┬────┘ └────┬────┘
|
|
│ │ │
|
|
▼ ▼ ▼
|
|
┌─────────┐ ┌─────────┐ ┌─────────┐
|
|
│ Load │ │ Bind │ │ Registry│
|
|
│ from KV │ │ Handlers│ │ Lookup │
|
|
└────┬────┘ └────┬────┘ └────┬────┘
|
|
│ │ │
|
|
└───────────┼───────────┘
|
|
│
|
|
▼
|
|
┌──────────────────────┐
|
|
│ React Component │
|
|
│ Tree │
|
|
└──────────┬───────────┘
|
|
│
|
|
▼
|
|
Final DOM
|
|
```
|
|
|
|
## Code Organization
|
|
|
|
```
|
|
src/
|
|
├── hooks/ # Business Logic Layer
|
|
│ ├── data/ # Data management
|
|
│ │ ├── use-array.ts
|
|
│ │ ├── use-crud.ts
|
|
│ │ ├── use-search.ts
|
|
│ │ ├── use-sort.ts
|
|
│ │ ├── use-pagination.ts
|
|
│ │ └── use-debounce.ts
|
|
│ ├── ui/ # UI state
|
|
│ │ ├── use-dialog.ts
|
|
│ │ ├── use-tabs.ts
|
|
│ │ ├── use-selection.ts
|
|
│ │ └── use-clipboard.ts
|
|
│ ├── forms/ # Form handling
|
|
│ │ ├── use-form.ts
|
|
│ │ └── use-form-field.ts
|
|
│ └── feature-ideas/ # Feature-specific
|
|
│ ├── use-feature-ideas.ts
|
|
│ └── use-idea-groups.ts
|
|
│
|
|
├── config/ # Configuration Layer
|
|
│ ├── orchestration/ # Engine
|
|
│ │ ├── schema.ts
|
|
│ │ ├── action-executor.ts
|
|
│ │ ├── data-source-manager.ts
|
|
│ │ ├── component-registry.ts
|
|
│ │ └── PageRenderer.tsx
|
|
│ └── pages/ # Page definitions
|
|
│ ├── dashboard.json
|
|
│ └── simple-form.json
|
|
│
|
|
└── components/ # Presentation Layer
|
|
├── ui/ # Shadcn components
|
|
├── atoms/ # Small, focused (<50 LOC)
|
|
├── molecules/ # Medium (<100 LOC)
|
|
└── organisms/ # Complex (<150 LOC)
|
|
```
|
|
|
|
## Migration Strategy
|
|
|
|
```
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Current State │
|
|
│ Large monolithic components (500+ LOC) │
|
|
└─────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Step 1: Extract Hooks │
|
|
│ Move business logic to custom hooks │
|
|
└─────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Step 2: Split Components │
|
|
│ Break into smaller presentation components │
|
|
└─────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Step 3: Create JSON Schema │
|
|
│ Define page structure in JSON │
|
|
└─────────────────┬───────────────────────────────────┘
|
|
│
|
|
▼
|
|
┌─────────────────────────────────────────────────────┐
|
|
│ Final State │
|
|
│ • Reusable hooks │
|
|
│ • Small components (<150 LOC) │
|
|
│ • JSON-driven pages │
|
|
│ • Fully testable │
|
|
└─────────────────────────────────────────────────────┘
|
|
```
|
|
|
|
## Benefits Visualization
|
|
|
|
```
|
|
Code Maintainability
|
|
Before: ████████░░ 80%
|
|
After: ██████████ 100% ✓
|
|
|
|
Code Reusability
|
|
Before: █████░░░░░ 50%
|
|
After: ██████████ 100% ✓
|
|
|
|
Testability
|
|
Before: ██████░░░░ 60%
|
|
After: ██████████ 100% ✓
|
|
|
|
Development Speed
|
|
Before: ███████░░░ 70%
|
|
After: ██████████ 100% ✓
|
|
|
|
Type Safety
|
|
Before: ████████░░ 80%
|
|
After: ██████████ 100% ✓
|
|
|
|
Component Size
|
|
Before: ██████████ 500+ LOC
|
|
After: ██░░░░░░░░ <150 LOC ✓
|
|
```
|
|
|
|
---
|
|
|
|
**Legend:**
|
|
- ✓ = Achieved
|
|
- ⚡ = Performance optimized
|
|
- 🔒 = Type safe
|
|
- ♻️ = Reusable
|
|
- 🧪 = Testable
|