Sedikit tentang SOLID dan warisan zombie yang keras

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








All Articles