đ§± PowerBuilder â RAD âDataWindowâ (CRUD massif, SI lourds)
Type : RAD Client/Serveur (historique) âą Points forts : DataWindow (CRUD + reporting + binding DB ultra productif), forte intĂ©gration SQL, productivitĂ© sur applications âmĂ©tierâ volumineuses âą RĂ©alitĂ© terrain : encore prĂ©sent dans des SI legacy (banques, assurances, industrie, admin) et maintenu sur de longues durĂ©es. Positionnement : đ âWinDev old-school + super composant Data-centricâ.
PowerBuilder â dĂ©finition & pourquoi ça a dominĂ©
RAD orientĂ© DB : Ă©crans CRUD + logique + SQL. Lâavantage clĂ© : DataWindow (binding, validation, updates).
RADClient/ServerLegacy SIDataWindow (le âkiller featureâ)
Composant data-centric : query â dataset â UI â validation â update DB. TrĂšs fort pour Ă©crans lourds et grilles.
CRUD++Binding SQLGridArchitecture (n-tiers, services)
Historique client/serveur, puis n-tiers : services, middle-tier, DB. Gouverner les accĂšs DB et isoler logique.
N-tiersServicesDBCRUD massif : Ă©crans âmĂ©tierâ lourds
Gestion de dossiers, saisie, contrĂŽles, tables rĂ©fĂ©rentielles, Ă©tats : PowerBuilder excelle sur volumĂ©trie dâĂ©crans.
Back-officeFormsOpsSQL & Data Access
Culture SQL ânativeâ : queries, transactions, concurrency. Sujet clĂ© : gouverner transactions, locks, erreurs.
SQLTransactionsConcurrencyMaintenance SI lourd
La réalité : refactor, stabilisation, sécurisation, tests, packaging, compatibilité OS/DB, dette technique.
RefactorStabilityDebtSécurité & gouvernance
RBAC, audit, secrets DB, durcissement rĂ©seau. Risque historique : clients âtrop prochesâ de la DB.
RBACDB SecretsAuditModernisation / migration
StratĂ©gies : wrap services, strangler, réécriture progressive, âscreen by screenâ. Objectif : rĂ©duire lock-in UI.
StranglerAPIPhasedPerformance (DB-centric)
Perfs = SQL + index + network + batch updates + pagination. DataWindow peut charger trop si mal cadrée.
IndexesPaginationTuningALM / releases
Builds, packaging, environnements, gestion de versions. Sur legacy : reproduire builds + dépendances = enjeu.
BuildReleaseEnvUse-cases & anti-usecases
OĂč PB est encore âROIâ (maintien SI lourd), et quand basculer vers web/services/low-code moderne.
LegacyOpsDecisionTradeoffs
Productivité CRUD vs UX moderne/web, dette technique, disponibilité des compétences, stratégie de modernisation.
TradeoffsSkillsModernizeQuickstart (audit 10 jours)
Plan âSI existantâ : cartographie, DataWindows critiques, SQL hotspots, sĂ©curitĂ©, build reproducible, plan migration.
AuditHotspotsPlanCheat-sheet PowerBuilder
Checklists : DataWindow, transactions, locks, perfs SQL, sécurité DB, refactor, modernisation progressive.
ChecklistDB-centricLegacyMental model (Ă retenir)
Pourquoi PowerBuilder reste présent
| Raison | Effet | Conséquence |
|---|---|---|
| Coût de remplacement | SI stable + gros périmÚtre | maintenance plutÎt que rewrite |
| CRUD massif | écrans + grilles + états | productivité historique |
| DB cĆur mĂ©tier | SQL proche, transactions maĂźtrisĂ©es | tuning âDB-centricâ |
Positionnement âtrĂšs fort sur CRUD / DataWindowâ
PowerBuilder (image) :
- tu construis vite des écrans data-centric (listes, grilles, formulaires)
- la DataWindow fait le gros du boulot : binding, update, validation, rendering
- tu codes la logique métier + navigation + contrÎles
- la DB est le centre : perfs = SQL + index + transactions + réseau
En 2025 :
- on le rencontre surtout en maintenance/modernisation
- lâenjeu = sĂ©curiser + stabiliser + sortir du client/serveur âpurâ
Le piĂšge : laisser des clients âtrop intelligentsâ parler trop directement Ă la DB sans contrĂŽle central.
Décision rapide (maintenir vs moderniser)
- Maintenir si : usage stable, ROI de refactor > rewrite, contraintes métiers fortes.
- Moderniser si : besoin web, sécurité, exposition API, montée en charge, UX moderne.
DĂ©finition âengineeringâ
PowerBuilder est un environnement RAD conçu pour accĂ©lĂ©rer la crĂ©ation dâapplications mĂ©tier data-centric. Sa signature : DataWindow â un composant qui encapsule une requĂȘte, un dataset, un rendu UI (table, formulaire), et une logique dâupdate vers la base. RĂ©sultat : des Ă©crans CRUD et des grilles construits trĂšs vite.
Les briques typiques
| Brique | RÎle | Erreur fréquente |
|---|---|---|
| DataWindow | dataset + UI + update | charger âtoutâ sans pagination |
| Business logic | contrÎles, rÚgles, flux | logique dispersée dans 80 écrans |
| DB connections | transactions, commits | transactions trop longues (locks) |
| Reports/exports | sorties métier | batch non contrÎlés (perfs) |
Promesse (cadrée)
Promesse PowerBuilder :
- fabriquer vite des Ă©crans data-centric et âopĂ©rationnelsâ
- manipuler des données avec une productivité élevée
- sâappuyer sur SQL/DB comme source de vĂ©ritĂ©
Condition de réussite (sinon legacy douloureux) :
- architecture : limiter l'accĂšs DB direct depuis UI
- discipline : logique métier centralisée / réutilisable
- transactions courtes (locks)
- tests & build reproductible
Une app PB âspaghettiâ devient trĂšs chĂšre Ă moderniser : la discipline est la seule assurance.
Forces (ce qui reste impressionnant)
| Force | Pourquoi | Résultat |
|---|---|---|
| CRUD / grilles | DataWindow âfait le jobâ | beaucoup dâĂ©crans vite |
| SQL natif | culture DB | contrÎle fin (si bien géré) |
| Apps lourdes | ergonomie ops | outil back-office efficace |
Domaines oĂč on le rencontre encore
- SI bancaires / assurance (back-office)
- industrie (gestion dossiers, stocks, référentiels)
- administration interne (process âdata-heavyâ)
- systĂšmes oĂč la DB est centrale et stable
Limites / risques
- UX / Web : pas conçu nativement pour expérience web moderne.
- Dette : logique dispersĂ©e, duplication, couplage UIâDB.
- Sécurité : clients historiques avec accÚs DB direct (risque + gouvernance).
- Compétences : rareté relative des profils (dépendance interne).
Anti-pattern âlegacyâ
- chaque écran a ses rÚgles copiées/collées
- SQL en dur partout
- transactions longues
- pas dâAPI / pas de couche service
- build non reproductible
=> modernisation = chantier
RemĂšde
- centraliser : "services" (API) + rÚgles partagées
- rĂ©duire le couplage UIâDB
- observer : hotspots SQL + locks + temps écran
- plan modernisation progressive (strangler)
Décision (maintien vs transformation)
| Question | Si âOuiâ | Sinon |
|---|---|---|
| Le SI est stable et rentable ? | maintenir + refactor ciblé | plan modernisation |
| Besoin web/API urgent ? | strangler + services | maintenance ok |
| Risque sécurité DB ? | isoler via middle-tier | durcir accÚs |
| VolumĂ©trie Ă©crans Ă©norme ? | migration progressive âscreen by screenâ | rewrite plus simple possible |
Mental model
DataWindow = "mini framework data-centric" :
- une source (SQL / stored proc)
- un dataset (rows/columns)
- un rendu UI (grid/form/labels)
- une logique dâupdate (insert/update/delete)
- des validations (type, formats, rĂšgles)
Résultat :
- fabriquer vite des écrans CRUD et listes
Ce que ça change
En dev web classique :
- tu codes UI + binding + validation + persistence
Avec DataWindow :
- tu configures beaucoup (et tu codes lâexception)
Donc :
- productivité énorme sur CRUD
- mais discipline nécessaire (sinon charge/perf)
Patterns (robustes)
Pattern 1 â âPaged listâ (anti-charge)
But : éviter "SELECT *" + 200k lignes.
- filtrer par critĂšres
- pagination (par pages)
- colonnes minimales
- lazy load détails sur action utilisateur
Pattern 2 â âValidate then commitâ
- valider champs (UI)
- valider rÚgles métier (service)
- commit court (transactions courtes)
- journaliser erreurs (corr_id)
Pattern 3 â âService wrapperâ
Objectif : sortir du DB direct.
- UI (PB) appelle un service
- service appelle DB, applique rĂšgles
- DB credentials uniquement cÎté service
Résultat :
- sécurité + gouvernance + audit
Pattern 4 â âRead model / Write modelâ
- lecture optimisée (vue, index)
- écriture validée (proc/service)
- réduit conflits et locks
Performance (les piĂšges DataWindow)
| PiĂšge | SymptĂŽme | Fix |
|---|---|---|
| Dataset énorme | écran lent, mémoire | pagination + colonnes minimales |
| Update en batch non cadré | locks, timeouts | transactions courtes, batch size |
| SQL non indexé | temps DB | index, plans, stats |
| N+1 queries | réseau saturé | jointures/vues, préchargement ciblé |
Quality gates (obligatoires sur legacy)
- Chaque DataWindow a un contrat (inputs, filtres, pagination).
- Pas de âSELECT *â en prod.
- Temps écran mesuré (p95) + budget de latence DB.
- Transactions courtes, commits explicités, rollback propre.
- Erreurs standard (message utilisateur + corr_id support).
- RBAC cohĂ©rent (Ă©cran â autorisation DB).
Topologie 1 â client/serveur âpurâ (legacy)
[PowerBuilder Client] ---> [Database]
- logique répartie cÎté client
- accĂšs DB direct
- sécurité : complexe (credentials distribués)
Topologie 2 â n-tiers (cible)
[PB UI] -> [Service/API Layer] -> [Database]
- credentials DB centralisés
- rÚgles métier réutilisables
- audit + rate limit + monitoring
- plus facile Ă exposer au web
Service layer : pourquoi câest le pivot
Service layer = "ré-architecture sans tout réécrire"
Apporte :
- sécurité (DB creds jamais cÎté client)
- gouvernance (RBAC, audit)
- standardisation erreurs (corr_id)
- performance (caching, pooling)
- ouverture (web, microservices, ETL)
Idée :
- la UI devient âplus fineâ
- la DB devient âmoins exposĂ©eâ
Ătapes de modernisation (pragmatiques)
- Cartographier : écrans/DataWindows critiques + flux DB.
- Isoler : 10 endpoints âserviceâ sur les opĂ©rations critiques.
- Basculer : PB UI â services pour ces opĂ©rations (1 pĂ©rimĂštre).
- RĂ©pĂ©ter : âstranglerâ Ă©cran par Ă©cran.
- Ouvrir : web / BI / mobile sur les mĂȘmes services.
Ce que âCRUD massifâ signifie (rĂ©el)
- 300 Ă 2000 Ă©crans mĂ©tiers (ouiâŠ)
- nombreux référentiels (clients, produits, rÚgles)
- grilles de saisie (bulk)
- validations complexes et historiques
- reporting/export pour lâopĂ©rationnel
La migration est coĂ»teuse surtout Ă cause du nombre dâĂ©crans, pas du âlangageâ.
StratĂ©gie âscreen-by-screenâ
- identifier top 20% écrans (usage)
- encapsuler rĂšgles dans services
- remplacer écrans progressivement :
- web
- autre RAD
- desktop modern
- garder la DB stable pendant transition
RĂšgles dâor (DB-centric)
- transactions courtes
- commits explicites et justifiés
- indexation alignée avec filtres réels
- Ă©viter requĂȘtes âfourre-toutâ
- observabilité : plan SQL + temps DB + p95 écran
Locks / concurrence (piĂšges legacy)
PiĂšges :
- écran ouvert = transaction non close
- batch update massif = locks longs
- âselect then updateâ sans stratĂ©gie
Fix :
- commits courts
- âoptimistic lockingâ quand possible
- batch size
- retry contrÎlé
Contrat dâerreurs (supportable)
- user_message : clair
- tech_message : log
- code : VALIDATION | CONFLICT | LOCK | TECH
- corr_id : support
Objectif :
- rĂ©duire le âdebug au tĂ©lĂ©phoneâ
La rĂ©alitĂ© âSI lourdâ
- Stabilité opérationnelle > nouvelles features.
- Compatibilité OS/DB/drivers/outils build.
- Refactor incrémental (sans casser).
- Documentation minimale : flux, écrans, DB objects, dépendances.
Top 10 chantiers rentables
- Build reproductible (versions, deps).
- Cartographie DataWindows critiques.
- Standard erreurs + corr_id.
- Centraliser rÚgles partagées.
- Durcir accĂšs DB.
- Mesurer perfs SQL (hotspots).
- Réduire transactions longues.
- Automatiser tests âhappy pathâ.
- Mettre une couche service pour opérations critiques.
- Plan de modernisation progressif (strangler).
âDebt radarâ (symptĂŽmes)
- duplication de logique (copier/coller)
- SQL en dur partout
- écrans trÚs couplés à la DB
- absence de standards
- temps écran non mesuré
- incidents rĂ©currents âalĂ©atoiresâ
- release risquée (pas de test)
=> ce sont des signaux de modernisation
Risque âlegacyâ #1 : DB credentials cĂŽtĂ© client
Si le client se connecte directement :
- distribution de secrets DB
- contrĂŽle dâaccĂšs hĂ©tĂ©rogĂšne
- audit incomplet
- surface dâattaque large
Le pivot sécurité = service layer (DB creds uniquement cÎté serveur).
ModĂšle de durcissement (pragmatique)
1) Séparer lecture/écriture
2) Centraliser accĂšs DB via services
3) RBAC cÎté services (pas seulement UI)
4) Audit : qui / quoi / quand (corr_id)
5) Rotation secrets + moindre privilĂšge
6) Segmenter réseau (DB non exposée)
4 stratégies (choisir selon contexte)
| Stratégie | Idée | Quand |
|---|---|---|
| Wrap services | API autour DB/logic | urgence sécurité / ouverture web |
| Strangler | remplacer par morceaux | beaucoup dâĂ©crans |
| Rewrite ciblé | réécrire 20% critique | ROI rapide |
| Rewrite total | nouveau SI | rare, si dette extrĂȘme |
Plan â6 moisâ (trĂšs pragmatique)
M1 : cartographie + hotspots SQL + risques sécurité
M2 : service layer (10 endpoints) + auth/RBAC + audit
M3 : migrer 5 écrans critiques vers services
M4 : construire un front web pilote (ou autre UI) sur mĂȘmes services
M5 : industrialiser ALM (dev/test/prod, release, tests)
M6 : Ă©tendre âscreen by screenâ + KPI adoption + rĂ©duction incidents
Risques (Ă anticiper)
- Inertie mĂ©tier : Ă©cran historique âindispensableâ.
- Ăcrans cachĂ©s : usage rĂ©el non documentĂ©.
- Couplage DB : trop de rĂšgles dans UI/SQL.
- Perf : nouveaux services doivent ĂȘtre dimensionnĂ©s (pooling, cache).
Les 7 leviers les plus rentables
| Levier | Mesure | Action |
|---|---|---|
| Plans SQL | top slow queries | index + stats + réécriture |
| Pagination | rows per screen | page size + filtres |
| Colonnes | payload | sélection minimale |
| Transactions | lock time | commits courts |
| Batch | update throughput | batch size + fenĂȘtre |
| Réseau | round-trips | éviter N+1 |
| Cache | hit ratio | référentiels en cache |
Mini protocole dâaudit perf (2 jours)
- instrumenter : temps écran + temps DB + rows loaded
- extraire top 30 queries
- vérifier index + stats + cardinalités
- identifier 10 DataWindows "gros datasets"
- appliquer : pagination + colonnes minimales + filtres
- re-mesurer p95
Build reproductible (la priorité #1)
Objectif :
- reconstruire la mĂȘme version Ă lâidentique
Actions :
- figer versions (compilo, libs, drivers)
- documenter dépendances
- automatiser build si possible
- artefacts signés / hash
Environnements
Minimum legacy :
- DEV : développement
- TEST : validation + perf
- PROD : exécution
RĂšgle :
- DB migrations contrÎlées
- credentials distincts
Release âsafeâ
1) build + tag version
2) tests fonctionnels (happy path)
3) sauvegarde DB + plan rollback
4) déploiement
5) smoke tests
6) monitoring post-release
Use-cases (réalistes)
- Maintenance et Ă©volution dâun back-office existant (Ă©crans nombreux).
- Refactor âsĂ©curitĂ© + perfâ sans changer lâoutil utilisateur.
- Modernisation progressive : PB UI conservée, services ajoutés.
- Migration âscreen-by-screenâ vers web / autre UI.
Anti-usecases (plutÎt éviter)
- Produit web public moderne, mobile-first, UX trĂšs custom.
- API-first cloud-native avec microservices/observabilitĂ© stricte (possible via service layer, mais alors PB nâest plus central).
- Refonte totale sans cartographie : risque projet trÚs élevé.
La bonne question : âmoderniser lâarchitectureâ plutĂŽt que âchanger lâoutilâ.
Tradeoffs (table)
| Choix | Gains | Coûts | Mitigation |
|---|---|---|---|
| Garder PB | stabilité + vitesse CRUD | dette + rareté skills | refactor + documentation + formation |
| Service layer | sécurité + ouverture web | chantier archi | strangler progressif |
| Rewrite | architecture moderne | coût/risque | cibler 20% critique |
| Migration écran | progressif | durée | KPI + priorisation usage |
Plan 10 jours (SI existant)
| Jour | Objectif | Livrable | CritĂšre |
|---|---|---|---|
| J1âJ2 | Cartographie | top Ă©crans/DataWindows + flux | 80% usage couvert |
| J3âJ4 | Perf DB | top queries + index gaps | hotspots identifiĂ©s |
| J5 | Transactions/locks | liste transactions longues | plan réduction |
| J6 | Sécurité | risques DB direct + plan durcissement | priorisé |
| J7 | Build | build reproductible documenté | rebuild ok |
| J8 | Standards | conventions + erreurs + corr_id | adoptable |
| J9 | Modernisation | stratégie (services/strangler) | pragmatique |
| J10 | Roadmap | plan 6 mois + KPI | validable |
KPI (modernisation)
- p95 temps écran (top 20)
- incidents / mois (avant/aprĂšs)
- % opérations via services (vs DB direct)
- backlog migration écrans
- taux dâadoption (utilisateurs actifs)
25 rĂšgles âprodâ
- Cartographier les DataWindows critiques (usage).
- Pagination obligatoire sur listes lourdes.
- Ăviter âSELECT *â et colonnes inutiles.
- Mesurer p95 temps écran + temps DB.
- Top slow queries â index/stats/réécriture.
- Transactions courtes (locks).
- Batch updates : batch size + fenĂȘtre.
- Standardiser erreurs (VALIDATION/LOCK/TECH) + corr_id.
- Centraliser rÚgles partagées (éviter duplication).
- RĂ©duire SQL âen durâ partout.
- Durcir accĂšs DB (moindre privilĂšge).
- Ăviter DB credentials cĂŽtĂ© client (si possible).
- Introduire service layer pour opérations critiques.
- RBAC cÎté serveur/service, pas seulement UI.
- Audit : qui fait quoi (au minimum sur opérations sensibles).
- Build reproductible (versions figées).
- DEV/TEST/PROD distincts.
- Plan rollback DB (backup, scripts).
- Documentation : flux + dépendances + runbook.
- Refactor hebdo (duplications).
- Strangler : écran par écran, priorisé usage.
- Exposer des APIs propres pour web/BI.
- Ne pas réécrire tout sans cartographie.
- POC perf avant bascule majeure.
- KPI modernisation suivis mensuellement.
Résumé (à coller dans IDEO-Lab)
PowerBuilder = RAD DB-centric historique
- force : DataWindow (CRUD + grilles + updates DB)
- encore présent dans des SI lourds (maintenance/modernisation)
- enjeux : perfs SQL, transactions/locks, sécurité (DB direct), build reproductible
- modernisation gagnante : service layer + strangler âscreen-by-screenâ
Positionnement : WinDev old-school + super composant data-centric
