Page 55 - Ký sự code dạo
P. 55

LẬP	TRÌNH	VIÊN	ĐÂU	PHẢI	CHỈ	BIẾT	CODE



                                   DEPENDENCY	INJECTION	VÀ	INVERSION	OF	CONTROL

                             Như	đã	nói	ở	bài	trước,	Dependency	Injection	(DI)	và	Inversion	of
                             Control	(IoC)	là	hai	khái	niệm	khó	hiểu	nhưng	rất	phổ	biến	trong	các
                             framework	hiện	đại.	Mình	cũng	thấy	vài	bạn	đã	đi	làm	1,	2	năm	mà	vẫn
                             còn	“ngáo	ngơ”	về	DI,	IoC,	chỉ	biết	sử	dụng	nhưng	không	hiểu	rõ	bản
                             chất	của	nó.

                             Do	đó,	mình	viết	bài	này	nhằm	giải	thích	một	cách	đơn	giản	dễ	hiểu	về
                             Dependency	Injection.	Các	bạn	junior	nên	đọc	thử	vì	DI	được	áp	dụng
                             rất	nhiều	trong	các	ứng	dụng	doanh	nghiệp	và	rất	hay	gặp	khi	đi	làm
                             hoặc	phỏng	vấn.

                             Phần	1:	Định	nghĩa
                             Trong	bài,	mình	hay	dùng	từ	module.	Trong	thực	tế,	module	này	có	thể
                             là	1	project,	1	file	dll,	hoặc	một	service.	Để	dễ	hiểu,	chỉ	trong	bài	viết
                             này,	các	bạn	hãy	xem	mỗi	module	là	một	class	nhé.
                             Nhắc	lại	kiến	thức

                             Trước	khi	bắt	đầu	với	Dependency	Injection,	các	bạn	hãy	đọc	lại	bài
                             viết	về	trước	về	những	nguyên	lý	SOLID	thiết	kế	và	viết	code.	Nguyên
                             lý	cuối	cùng	trong	SOLID	chính	là	Dependency	Inversion:

                                     1.	Các	module	cấp	cao	không	nên	phụ	thuộc	vào	các	modules
                                     cấp	thấp.	Cả	2	nên	phụ	thuộc	vào	abstraction.
                                     2.	Interface	(abstraction)	không	nên	phụ	thuộc	vào	chi	tiết,	mà
                                     ngược	lại.	(	Các	class	giao	tiếp	với	nhau	thông	qua	interface,
                                     không	phải	thông	qua	implementation.)
                             Với	cách	code	thông	thường,	các	module	cấp	cao	sẽ	gọi	các	module	cấp
                             thấp.	Module	cấp	cao	sẽ	phụ	thuộc	và	module	cấp	thấp,	điều	đó	tạo	ra
                             các	dependency.	Khi	module	cấp	thấp	thay	đổi,	module	cấp	cao	phải
                             thay	đổi	theo.	Một	thay	đổi	sẽ	kéo	theo	hàng	loạt	thay	đổi,	giảm	khả
                             năng	bảo	trì	của	code.












                                                                53
   50   51   52   53   54   55   56   57   58   59   60