Un peu sur SOLID et le dur héritage des zombies

Réflexions optimistes prudentes sur la place de la culture industrielle moderne, accompagnées de logiciels hérités des temps anciens. Et un peu sur l'interpénétration des principes SOLID.





Je travaille systématiquement avec Delphi 7 (fonctionne comme ça, cho ...). Je maintiens et affine activement une application qui a ses racines du début au milieu des années 2000 et qui est écrite dans un style procédural impératif impitoyable. Est-il possible de survivre mentalement dans un tel environnement? Après tout, "le seul moyen de les vaincre est de ne pas devenir l'un d'eux", n'est-ce pas?





Vous pouvez réellement voir quelque chose comme ceci ici:





procedure TReport13Form.OnButton1Click(Sender: TObject);
begin
	with MainForm.WorkQuery.SQL do
	begin
		Add('Select ...');
		if ... then
			Add(', ...');
		Add('from ...');
		if ... then
			Add('join...');
		... //   -  .
		Add(Format('where id = %d and operDate = %s',
			[id, QuotedStr(DToS(DatePicker1.Date))]));
      
      



... et autres obscénités similaires.





Mais réécrire tout à partir de zéro relève du fanatisme religieux radical (comme si quelqu'un criait et balançait automatiquement une pantoufle juste après avoir entendu parler de Delphi 7).





Par expérience, je dirai: vous pouvez. Oui, en conséquence, l'uniformité de style du code source du programme est violée, mais c'est loin d'être le pire qui puisse arriver. Le pire est de «devenir l'un d'eux» (1) .





1) : . ( , ) : , , , git(2). . . . , . 





2) , git - . , CVS (git ) " ".





, . " "? , : " , : !"? , , , , , , . , , SOLID?





, . -- - ( , , - ). VCL, , . , , . . .





, , : https://bitbucket.org/danik-ik/layoutkeeper/





.





:





ILayoutKeeper - , . .





ILayoutProcessor - . , ,





() , , , (Keeper) (Processor).





, .





, .





S. Single responsibility principle

( ) , : , , / .





, . . . . , S.principle .





O. Open-Closed principle

, Closed ( , , ), ? , . , ! . 





. , Delphi , , , , , , , I. , , , (Open) (Closed). , , . ( - ).





L. Liskov substitution principle

, , ( ) : ( ), , , , , " " . () : . , (, ), ( ). 





, ) , ) , .





() , , , , S - - ( - ), , . 





() - , " " TForm, Forms.TForm uses Forms, . ? , , (?). , S L.





I. Interface segregation principle

: . , S. (ILayoutKeeper) "" (ILayoutProcessor), . , -- S , .





D. Dependency inversion principle

. , , , . ini-, ( , , ) MainForm, - . . , , -- . (), ( ). . D S , , - , . , , . "" EhLib , .





"" -- OeStrUtil, -, . (RxStrUtils.ExtractWord, ), . - , . .





, ? , . .





. , . " ", . SOLID- , . S I , D O (, pet- ), L , , , ( , S O).








All Articles