Um pouco sobre SOLID e o legado de zumbis severo

Reflexões otimistas cautelosas sobre o lugar da cultura industrial moderna, acompanhadas de softwares herdados da antiguidade. E um pouco sobre a interpenetração dos princípios SOLID.





Eu trabalho sistematicamente com Delphi 7 (trabalho assim, cho ...). Eu mantenho e refino ativamente um aplicativo que tem suas raízes no início da década de 2000 e é escrito em um estilo de procedimento implacável e imperativo. É possível sobreviver mentalmente em tal ambiente? Afinal, “a única maneira de derrotá-los é não se tornar um deles”, certo?





Você pode realmente ver algo assim aqui:





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



... e outras obscenidades semelhantes.





Mas reescrever tudo do zero é algo da área do fanatismo religioso radical (como se alguém gritasse e automaticamente balançasse um chinelo logo após ouvir sobre o Delphi 7).





Por experiência, direi: você pode. Sim, como resultado, a uniformidade de estilo do código-fonte do programa é violada, mas isso está longe de ser o pior que pode acontecer. O pior é “tornar-se um deles” (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