Peu importe si c'est une publicité déguisée, plusieurs points font qu'elle dissuade l'utilisation de StroyCode
1- Beaucoup de Clic !
Comme tout le monde professionnel le sait, alterner entre le clavier et la souris est une opération lente
C'est pour cela que pour une application de saisie en masse, on va privilégier les raccourcis clavier pour réduire l'utilisation de la souris
Au final, un développeur qui a une bonne idée générale des deux classes qu'il va produire, ne devrait pas mettre plus de temps à taper le code que d'utiliser StroyCode !
D'ailleurs, pour la property, gros défaut de devoir créer séparément la variable privé et la property
Un assistant digne de ce nom devrait permettre de créer la property (Nom + Classe) et de générer au clic droit le partie simpliste Get\Set\FMember sans devoir faire ces copier coller
Dommage, il y avait là de quoi optimiser la frappe ! démonstration ratée à ce sujet !
Au moins le refactoring sur le renommage de FUser lui fonctionne ! c'est le minimum !
2 - Modification du sources par un programme autre que StroyCode !
On nous montre la génération, c'est bien mais incomplet !
Pas de démonstration de réintégration de modification dans cette vidéo, dommage, même une modification mineure aurait été sympa à être ré-intégré au diagramme !
Je pense à une modification faite en Delphi mais surtout à l'utilisation d'un outil comme TortoiseSVN utilisé dans une équipe de professionnel pour synchroniser les sources (merge auto, merge conflict ...), il faut que StroyCode puisse le gérer pour être convaincant !
3- Ensuite, le code choisi n'est pas terrible !
Utiliser un gestionnaire d'évènement affecté durant le setter, hum, j'ai fait cette erreur, je ne le ferais plus ! Trop vicieux !
On ne peut plus librement affecté le gestionnaire, ainsi si un controller dans son IHM ou TUserManager avait affecté son propre gestionnaire à cet instance de TUser, il est donc perdu !
C'est un sacré piège ce code !
On est à la limite d'une
anti-pattern Action à distanceUn développeur aussi doué que l'auteur de StroyCode (
faut reconnaitre que c'est assez "chiadé" visuellement) n'aurait du faire ce genre d'erreur de conception !
Evidemment, on pourrait tomber dans un abus d'architecture et obtenir
une anti-pattern Programmation spaghetti avec un gestion des événements complexes avec une liste de listener et un tralala d'interface pour gérer plusieurs gestionnaire simultanément mais cela ne serait pas raisonnable !
Il y a plusieurs possibilités pour gérer cela SANS gestionnaire !
Une property ReadOnly ou une méthode LockRigths\UnlockRigths, pour empêcher une modification de Rigths
une property ReadOnly basique : true\false pose un problème si l'on rétabli ReadOnly à true au changement de TUser, est-ce correct ?
Mémoriser la valeur précédente, bof, pas très fiable
il faudrait un compteur comme BeginUpdate\EndUpdate
Cela a l'avantage de généraliser cela à l'objet TUser et pas juste au TSystem, le mécanisme LockRigths\UnlockRigths est réutilisable !
Autre technique le clonage d'instance, on connait bien cela avec le TPicture\TBitmap
TUser hérite de TPersistent et redéfini Assign !
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
| constructor TSystem.Create();
begin
inherited Create();
FAdministrator := TUser.Create();
end;
destructor TSystem.Destroy();
begin
FreeAndNil(FAdministrator);
inherited Destroy();
end;
procedure TSystem.SetAdministrator(AValue: TUser);
begin
FAdministrator.Assign(AValue); // Copie ce qu'il faut !
end; |
L'inconvénient, c'est que si l'on modifie l'autre TUser, le TSystem ne le saura pas, on en revient à devoir faire une notification des clones, une patten
Observateur pourrait être ainsi mis en place
L'avantage, c'est un code bien plus simple !
1 |
0 |