2.4 KiB
2.4 KiB
Architecture
Solution Dependency Graph
FruitBank.Common (shared domain)
↑
FruitBank.Common.Server (server-side services, nopCommerce)
↑
FruitBankHybrid.Shared.Common (shared utilities, placeholder)
↑
FruitBankHybrid.Shared (Blazor UI components, pages, services)
↑ ↑ ↑
FruitBankHybrid FruitBankHybrid.Web FruitBankHybrid.Web.Client
(MAUI Hybrid) (Blazor Server) (Blazor WASM)
All projects also reference AyCode.Core and AyCode.Blazor via DLL references (not ProjectReference).
Three Deployment Targets
| Target | Project | How UI Runs |
|---|---|---|
| MAUI Hybrid | FruitBankHybrid | Native app with BlazorWebView |
| Blazor Server | FruitBankHybrid.Web | Server-side rendering + SignalR |
| Blazor WASM | FruitBankHybrid.Web.Client | Downloaded to browser, runs in WASM |
All three share the same UI components from FruitBankHybrid.Shared.
Data Flow
User → DevExpress Grid → AcSignalRDataSource → SignalR (AcBinary) → DevAdminSignalRHub
↓
DynamicMethodRegistry
↓
IFruitBankDataControllerServer
ICustomOrderSignalREndpointServer
IStockSignalREndpointServer
↓
nopCommerce Database
Key Architectural Decisions
- nopCommerce plugin — Customer, Order, Product are nopCommerce entities extended via GenericAttributes and DTOs
- SignalR over REST — all data flows through SignalR with AcBinary protocol
- DevExpress Blazor 25.1.3 — exclusive UI component library
- Three measurement hierarchies — Shipping/Order/StockTaking share same base but have different audit rules
- Client-side database —
DatabaseClientcaches entities in ConcurrentDictionary for offline/fast access - Platform-specific credential storage — MAUI uses SecureStorage, Web uses obfuscated localStorage, Server uses no-op
LLM Maintenance: If you modify the architecture, update this document.