Un poco sobre SOLID y el duro legado zombie

Reflexiones cautelosas y optimistas sobre el lugar de la cultura industrial moderna, acompañadas de software heredado de la antigüedad. Y un poco sobre la interpenetración de principios SOLID.





Trabajo sistemáticamente con Delphi 7 (trabajo así, cho ...). Mantengo y refino activamente una aplicación que tiene sus raíces desde principios hasta mediados de la década de 2000 y está escrita en un estilo procedimental imperativo implacable. ¿Es posible sobrevivir mentalmente en un entorno así? Después de todo, "la única forma de derrotarlos es no convertirse en uno de ellos", ¿verdad?





De hecho, puedes ver algo como esto aquí:





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))]));
      
      



... y otras obscenidades similares.





Pero reescribir todo desde cero es algo que pertenece al área del fanatismo religioso radical (como si alguien gritara y automáticamente moviera una zapatilla justo después de escuchar sobre Delphi 7).





Por experiencia diré: puedes. Sí, como resultado, se viola la uniformidad de estilo del código fuente del programa, pero esto está lejos de ser lo peor que puede suceder. Lo peor es “convertirse en uno de ellos” (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