Ein wenig über SOLID und das harte Zombie-Erbe

Vorsichtige optimistische Überlegungen zum Ort der modernen Industriekultur, begleitet von Software, die aus der Antike stammt. Und ein wenig über die Durchdringung von SOLID-Prinzipien.





Ich arbeite systematisch mit Delphi 7 (arbeite so, cho ...). Ich pflege und verfeinere aktiv eine Anwendung, die ihre Wurzeln in den frühen bis mittleren 2000er Jahren hat und in einem rücksichtslosen imperativen Verfahrensstil geschrieben ist. Ist es möglich, in einer solchen Umgebung mental zu überleben? Immerhin "ist der einzige Weg, sie zu besiegen, nicht einer von ihnen zu werden", oder?





Sie können so etwas tatsächlich hier sehen:





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



... und andere ähnliche Obszönitäten.





Aber alles von Grund auf neu zu schreiben, ist etwas aus dem Bereich des radikalen religiösen Fanatismus (als ob jemand schrie und automatisch einen Pantoffel schwang, kurz nachdem er von Delphi 7 gehört hatte).





Aus Erfahrung werde ich sagen: Sie können. Ja, infolgedessen wird die Stilgleichmäßigkeit des Quellcodes des Programms verletzt, aber dies ist alles andere als das Schlimmste, was passieren kann. Das Schlimmste ist, „einer von ihnen zu werden“ (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