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).