6.8 KiB
6.8 KiB
QWEN3CoderNext - DataPRO Codebase Onboarding Guide
Quick Start
Build & Run
# Build solution (Windows/Visual Studio required)
msbuild DataPRO/DataPRO.sln /p:Configuration=Debug
# Run tests (NUnit-based)
# Tests located in DataPRO/UnitTest/
Critical Files
- Solution:
DataPRO.sln(440+ lines, 100+ projects) - Main App:
DataPRO/App.xaml.cs(4620+ lines - god class warning) - Database:
DataPRO/DbAPI/DbAPI.cs(static facade, no interface) - Constants:
Common/DTS.Common.Core/DTSConstants.cs(hardcoded dev paths)
Architecture Summary
Tech Stack
- UI Framework: WPF (.NET Framework 4.8)
- Architecture: MVVM + Prism 8.x Modularity
- DI Container: Unity
- State Machine: Stateless library ( IService )
High-Level Layers
┌─────────────────────────────────────────────────────────────┐
│ UI Layer (Prism Modules) │
│ Sensors, Hardware, Groups, Realtime, Reports, ISO Settings│
│ 30+ modules, each with ViewModels, Views, Services │
└───────────────────────┬───────────────────────────────────────┘
│ EventAggregator (IEventAggregator)
▼
┌─────────────────────────────────────────────────────────────┐
│ Services Layer (IService, DASFactory) │
│ - Hardware discovery & command execution │
│ - State machine (Prepare→Configure→Arm→Realtime→...) │
│ - UDP streaming for real-time data │
└───────────────────────┬───────────────────────────────────────┘
│
▼
┌─────────────────────────────────────────────────────────────┐
│ Data Layer (DbAPI, SensorDB) │
│ Static DbAPI facade → IConnections, ISensors, IGroups │
│ SQLite database with hardware-specific schemas │
└───────────────────────────────────────────────────────────────┘
Data Flow Patterns
- Hardware Discovery: Hardware → DASFactory → EventBus → Modules
- Test Configuration: Sensors → Groups → TestSetups → DbAPI
- Real-time Data: IService → UDP → Charts + Database Storage
Development Workflow
Adding a New Module
- Follow pattern in
DataPRO/Modules/Sensors/orDataPRO/Modules/Hardware/ - Module must implement
IModule.Initialize() - Register views/services in
RegisterTypes()(Unity container) - Subscribe to events via
IEventAggregator(avoid staticDbAPI where possible)
Adding Hardware Support
- Hardware Commands: Add command library in
HardwareCommands/(e.g.,RibeyeCommands/) - Hardware Type: Add enum to
DTS.Common.Core/DASHardwareType.cs - Factory Registration: Register in
DASFactory(seeDASFactory.cshardware discovery logic) - Module: Create or extend Prism module for UI support
Event Aggregator Patterns
- Hardware Events:
HardwareConnectedEvent,HardwareDisconnectedEvent - Data Events:
TestDataUpdatedEvent,RealtimeDataAvailableEvent - State Events:
SystemStateChangedEvent - Use
PubSubEvent<T>for cross-module communication - Avoid: Direct coupling, static DbAPI access in ViewModels
Import/Export Workflow
- Template: See
GLM5Analysis/PatternLibrary/ImportExport.md - Data Format: CSV, XML, or custom binary
- Validation: Run through
DbAPIlayer (don't bypass) - Error Handling: Use
IEventAggregatorto publish导入 errors
Key Gotchas & Tech Debt
Critical
- Static DbAPI (
DbAPI.cs:237-373): No interface abstraction, hard to test - God Class:
App.xaml.cscontains 4620+ lines of mixed logic (licensing, test state, DB ops, UI) - Mixed Patterns: BackgroundWorker (legacy) vs async/await (newer code)
- Hardcoded Paths:
DTSConstants.cscontains dev environment paths - Module initialization: Some use
Initialize(), othersRegisterTypes()- inconsistent
Testing
- UnitTest: NUnit-based tests in
DataPRO/UnitTest/ - Test Scaffolds: See
GLM5Analysis/TestScaffolds/ - Mocking: Use Moq for
IEventAggregator,IService,IDbConnection
Build Issues
- Windows Only: Requires Visual Studio (WPF, .NET Framework 4.8)
- Dependencies: SQLite runtime, National Instruments drivers (if applicable)
Tooling & Documentation
AI-Powered Search (Recommended)
# Use these tools before grep:
retrieval_vector_search("how does hardware discovery work")
retrieval_get_module_summary("DataPRO/Modules/Sensors")
retrieval_list_enriched_modules()
Existing Documentation
| Location | Purpose |
|---|---|
GLM5Analysis/Architecture.md |
System architecture (420-line master guide) |
GLM5Analysis/PromptTemplates/ |
Task-specific guides (AddUnitTest, AddHardware, etc.) |
GLM5Analysis/PatternLibrary/ |
Reusable patterns (MVVM, Prism, ImportExport) |
GLM5Analysis/TestScaffolds/ |
Test templates |
enriched-qwen3-coder-next/ |
AI-generated module docs |
GIT Migration.md |
SVN → Git migration plan |
Further Reading
-
Core Modules (use
retrieval_get_module_summary()):Common/DTS.Common.Core/- Constants, base classesDataPRO/DbAPI/- Database access layerDataPRO/Modules/Sensors/- Sensor management moduleDataPRO/Modules/Hardware/- Hardware discovery module
-
Critical Files:
DataPRO/App.xaml.cs- Main application initializationDataPRO/DbAPI/DbAPI.cs- Database facade (static, no interface)DataPRO/Modules/ModuleBase.cs- Prism module base class
-
Patterns (see
GLM5Analysis/PatternLibrary/):- MVVM Pattern (ViewModel, View, Model separation)
- Prism Module Pattern ( interface, registration)
- Event Aggregator Pattern (cross-module communication)
- Service Pattern (IDataService, ISensorService)
- DataAccess Pattern (DbAPI facade pattern)
Remember:
- Use
retrievaltools first for code exploration - Avoid static DbAPI access in new code
- Follow Prism module patterns consistently
- Check
AGENTS.mdfor opencode-specific workflow configuration