Refleksi optimis yang cermat atas tempat budaya industri modern, disertai dengan perangkat lunak yang diwarisi dari zaman kuno. Dan sedikit tentang interpenetrasi prinsip SOLID.
Saya secara sistematis bekerja dengan Delphi 7 (bekerja seperti itu, cho ...). Saya memelihara dan secara aktif menyempurnakan aplikasi yang berakar pada awal hingga pertengahan 2000-an dan ditulis dengan gaya prosedural imperatif yang kejam. Apakah mungkin untuk bertahan hidup secara mental dalam lingkungan seperti itu? Lagi pula, "satu-satunya cara untuk mengalahkan mereka adalah dengan tidak menjadi salah satu dari mereka," bukan?
Anda sebenarnya dapat melihat sesuatu seperti ini di sini:
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))]));
... dan kata-kata kotor serupa lainnya.
Tapi menulis ulang semuanya dari awal adalah sesuatu dari area fanatisme agama radikal (seolah-olah seseorang berteriak dan secara otomatis mengayunkan sepatu setelah mendengar tentang Delphi 7).
Dari pengalaman saya akan mengatakan: Anda bisa. Ya, sebagai akibatnya, keseragaman gaya dari kode sumber program dilanggar, tetapi ini jauh dari kemungkinan terburuk yang dapat terjadi. Yang terburuk adalah “menjadi salah satu dari mereka” (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).