Hỏi về dependency injection

Hiện mình đang tìm hiểu về pattern này, và hiểu ý cơ bản của nó là ntn:
Cách cũ là khi muốn dùng class nào thì phải khởi tạo class đó, nhưng khi dùng DI thì sẽ có 1 container chuyên khởi tạo class, xong mình muốn dùng class nào thì thông qua thằng container đó, kiểu như khai báo 1 lần dùng mọi chỗ. Mình hiểu như vậy có đúng ko m.n nhỉ, tiện mình có build 1 cái demo bằng java android, m.n có thể ngó qua giúp mình xem như kia oke ko ạ, thanks m.n :smiley:

Bạn tạo như này ko phải Singleton. Thế khác gì tạo trực tiếp đâu.

3 Likes

DI hiểu 1 cách đơn giản là cách viết code để nhằm giảm sự phụ thuộc lẫn nhau giữa các object. Lợi ích của việc giảm thiểu sự phụ thuộc giữa các object sẽ giúp bạn maintain dễ hơn, viết unit test dễ dàng hơn…

Cái bạn đang nói tới chỉ là vấn đề khởi tạo object thuần túy, cái quan trọng của DI là cách khởi tạo như thế nào và quản lý vòng đời của object như thế nào thì bạn nên tìm hiểu thêm. Xem qua bài mình viết ở đây :

4 Likes

mình cũng tính cho singleton vào nhưng cứ tạm bỏ qua nó thì như kia có đúng DI ko ạ :smiley:

thank b, mình có sửa lại project b xem qua giúp mình xem có ok ko ạ

không ok 1 chút nào vì có quá nhiều boilerplate. Khá là phức tạp khi sử dụng, muốn instance 1 class thì lại phải sửa và thêm mới kha khá, điều này hơi ngược so với mục tiêu ban đầu của DI. Ngoài ra đang instance new mỗi khi request instance nên chưa thể dùng cho trường hợp singleton toàn app và singleton cục bộ

1 Like

theo m thì b cứ sài thư viện có sẵn trước koin hay dagger2 . Đọc doc xem họ viết di nhằm mục đích gì rồi tự viết hoặc sài luôn cho lẹ

1 Like

Dependency Injection với mình nó khá đơn giản thế này:

  • Đầu tiên bạn tạo ra hệ thống, ví dụ như một cái function, hoặc một cái object;
  • Sau đó bạn cho cái hệ thống đó qua một cái Injector, ví dụ nếu là object thì Injector sẽ gán các Dependency vào các property của object, còn nếu là function thì injector sẽ tạo ra 1 wrapper function trong đó đã inject sẵn vài cái param chính là dependency. (Trường hợp là function thì Angular hoặc Laravel là điển hình)

Sau đó bạn xài object hoặc wrapper function đó thì đã có sẵn dependency do Injector gán vào.

2 Likes

èo, khó hiểu quá :(((

mình làm theo ví dụ trên mạng nó còn phức tạp hơn á b, mình cắt bớt đi rồi đó, hjx

Cứ code nhiều là bạn hiểu à, đọc lý thuyết mà lĩnh hội đc 100% thì còn gọi gì là người nữa, Theo m bạn hiểu sơ lược như vậy là ok rồi, bắt tay vào code thôi .

2 Likes

Mình có code rồi mà vẫn thấy nó phức tạp quá, như b trên bảo, khó thay thế bảo trì, chắc mò thêm vậy

dagger 2 còn phải google maintain mà tạo đc cái di dùng đc đâu phải dễ

1 Like

h mình hiểu sơ lược về DI rồi, còn mỗi cái DIContainer là chưa biết làm ntn, theo mình hiểu DIContainer thường có sẵn thư viện kiểu như dagger hay c# mvp5 có sẵn phải ko nhỉ

83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?