Critical Diagnosis of the Legacy Stack
The author dissects four "structural sins" of the two-decade-old stack (C# WinForms + DevExpress + SOAP WebService + Oracle stored procedures), once standard in government, finance, manufacturing, and ERP:
- WinForms + DevExpress (fat client): business logic entangled with UI event handlers; Windows-only; DLL Hell on every deployment; expensive proprietary licensing.
- WebService (SOAP/WSDL): XML payloads over 60% redundant; rigid contracts where any field change crashes old clients; incompatible with modern JSON/gRPC and API gateway governance.
- Oracle PL/SQL: core business rules buried in stored procedures, packages, and triggers; the database becomes a single-point compute bottleneck; code is untestable and outside CI/CD; high licensing costs.
- ClickOnce / manual distribution: fragile two-tier architecture with client-resident state; scaling and high availability depend on expensive mainframes/RAC.
- Presentation: Vue 3 / React + TypeScript + Ag-Grid Enterprise + ECharts (replaces DevExpress XtraGrid/XtraReport); optional Tauri/Electron desktop shell.
- Gateway: Spring Cloud Gateway for auth, routing, rate limiting, tracing (SkyWalking); Spring-WS / Apache CXF facade for legacy SOAP compatibility.
- Services: Java 21 LTS (virtual threads) + Spring Boot 3.x, DDD modeling, Redisson + Redis for distributed locks and caching.
- Persistence: HikariCP + MyBatis-Plus / jOOQ; keep Oracle 19c/23ai initially, evolving toward PostgreSQL 16+ or domestic databases (DM, OceanBase, KingbaseES).
- Reporting: FineReport / JasperReports for web-based, server-side rendered reports.
- Strategically, this is a leap from a LAN-era monolithic architecture to a cloud-native, multi-terminal, microservices digital base.
- UI: abandon JavaFX; adopt Ag-Grid Enterprise for complex grid UX.
- Business: dual-track operation via the Strangler Fig pattern; never Big-Bang rewrite.
- Data: follow the three-step rule — call first, extract second, migrate the database last.
Migration Pitfalls to Avoid
1. Do not try to pixel-replicate WinForms with JavaFX/Swing. JavaFX lacks a commercial-grade control ecosystem comparable to DevExpress. The correct path is a modern web frontend (Vue 3 / React + Ag-Grid Enterprise); use Tauri/Electron shells only when hardware peripherals (scanners, printers) must be accessed. 2. Do not Big-Bang rewrite stored procedures. Decades-old PL/SQL hides unknown edge cases. Instead, first wrap existing stored procedures transparently from Java (MyBatis/jOOQ), then gradually extract logic into Java services as DDD module boundaries clarify.
Target Architecture
Four-Phase Strangler Migration Roadmap
1. Phase 1 (months 1–2) — Protocol consolidation: deploy Spring Cloud Gateway; use Apache CXF/Spring-WS as a SOAP facade to intercept legacy WebService traffic, adding monitoring, auth, and rate limiting without touching existing clients. 2. Phase 2 (months 3–6) — Core web-enablement: migrate 2–3 decoupled, high-demand modules (report queries, order entry) to Vue 3 + Ag-Grid with RESTful JSON APIs on Spring Boot 3; replace WinForms screens via micro-frontends (Qiankun / Module Federation). 3. Phase 3 (months 7–10) — Logic extraction: move PL/SQL business algorithms into Java 21 domain services using DDD (aggregates, entities, domain events), with JUnit 5 + Testcontainers for full regression coverage. 4. Phase 4 (months 11–12) — Data modernization: with logic closed-loop in Java, degrade Oracle to pure persistence and migrate to PostgreSQL 16+ or domestic databases; retire ASMX/WCF services and WinForms runtime.
Key Takeaways
References
1. Fowler, M. (2004). *Strangler Fig Application* — martinfowler.com/bliki/StranglerFigApplication.html 2. Brooks, F. P. (1987). *No Silver Bullet—Essence and Accidents of Software Engineering*, IEEE Computer, 20(4), 10-19. DOI: 10.1109/MC.1987.1663532