Hiểu về Dependency Injection thông qua ví dụ thực tế.

Bài viết này được tổng hợp lại sau khi mình đọc qua một loại bài mô tả về Dependency Injection, tuy nhiên nếu giải thích theo code thì rất khó để hiểu về Dependency Injection là gì? Chính vì thế bài viết này mình cố găng mô tả Dependency Injection thông qua các khái niệm thực tế đơn giản và các ví dụ mô tả việc áp dụng nó trong thực tế.

Hiểu về Dependency Injection thông qua ví dụ thực tế.

Đầu tiên ta hãy thử dịch nghĩa của từ "Dependency Injection" sang tiếng việt xem nó là gì, mình xin tạm dịch là "tiêm chích sự tin tưởng" hoặc "tiêm chích sư phụ thuộc" hết hồn chưa, ở đây do mình thích từ tin tưởng hơn nên trong bài viết đa số mình sẽ dùng từ "tin tưởng" để giải thích trong suốt bài viết.

Mới đầu cũng đếch hiểu sao nó dùng thì khó nghe vậy dịch theo code cũng khó hiểu, nhưng khi tìm hiểu thì thấy dùng từ này hoàn toàn hợp lý.

Hãy để mình cố gắng thử đưa ra một khái niệm đơn giản trong thực tế về "Dependency Injection" trong tiếng việt,  "Dependency Injection" viết tắt là "DI" là cách để tiêm(gắn, chèn) một hay nhiều cái gì đó có sự tin tưởng (hoặc bị phụ thuộc) vào một chủ thể nào thể nào đó."

Example 1 - Ví du 1:

Lấy ví dụ thế này bạn bị cúm bạn phải đi tiêm thuốc chữa bệnh, và tất nhiên bạn không thể tiêm cúm heo, cúm gà, hay cúm gì đó bậy bạ mà phải tiêm cúm người và tất nhiêm mũi tiêm này phải có được sự tin tưởng hay nói cách khác là sự kiểm chứng an toàn của bạn, bạn mới dám để nó tiêm vào người thì đây gọi là "Dependency Injection".

Hay nói cách khác bác sĩ đã tiêm vào bạn trước sự tin tưởng "hay tin ta, ta sẽ không tiêm nhần thuốc đâu" và bạn tin tưởng và bác sĩ ai biểu người ta là bác sĩ :>> nên bạn chỉ có thể lựa chọn là tin tưởng.

Example 2 - Ví dụ 2:

 Bây giờ ta sẽ đi tiếp qua thêm một ví dụ thực tế khác để mô tả rõ hơn về khái niệm "Dependency Injection", bạn hãy xem hình minh họa người đánh golf và người giữ gậy ở hình bên dưới.

example-dependency-injection-golf

Thằng đánh gôn nó kêu thằng giữ gậy "lấy cho tao cây gậy", mà trong túi xách đựng gậy thì lại có 4 cây gập là (không dịch nhé bạn nào chơi golf mới biết mình không chơi không biết :>>):
  • WoodClup
  • IronClup
  • WedgeClup
  • PutterClup.

Vấn đề được đặt ra là làm seo "người giữ golf sẽ biết lấy cây gậy nào cho người đánh golf trong khi có tới 4 loại gậy", và làm thế nào mà người đánh golf biết chắc rằng hay nói tin tưởng rằng "người giữ gậy sẽ lấy đúng cây gậy họ cần".

Tất nhiên những người giữ gây đã được hướng dẫn sẽ đưa cho khách hàng loại gậy nào trong trường hợp nào, và khách hàng cũng đã biết hoặc đã tin tưởng rằng người giữ gây sẽ lậy đúng cậy golf mà họ cần nên họ sẽ không cần phải nêu ra tên chính xác của cây gập.

Nói theo đúng nghĩa của "Dependency Injection" là thằng chủ sân golf đã tiêm vào người thằng khách hàng rằng "này hãy tin tưởng thằng giữ gậy và thằng khách hàng nó tin vào điều đó." :>>

Example 3 - Ví dụ 3:

Ví dụ mình họa này phức tạp hơn một chút vì nó sẽ chia ra làm hai trường hợp để giúp bạn hiểu rỡ hơn về lợi ích của việc sử dụng "Dependency Injection", ok ta sẽ đi vào trường hợp 1 trước.

Trường hợp 1:

Công ty bạn là một công ty tổ chức sự kiện, bạn và đồng nghiệp của bạn phải thường xuyên đi xa để xử lý công việc, và thông thường một chuyến đi của bạn cần phải sử dụng máy bay, taxi, khách sạn theo yêu cầu của công ty để tránh phát sinh chi phí khi sử dụng các dịch vụ khác

Và trường hợp thứ nhất này cho rằng bạn và đồng nghiệp biết cách để liên hệ, sử dụng, thảo luận giá cả với các dịch vụ di chuyển và khác sạn trên, như nơi bán vé, nơi bắt taxi,... ở tất cả địa điểm mà bạn đi công tác đi chẳng hạn.

Ok giờ bạn sẽ lên lịch cho chuyến đi của mình đơn giản như sau:
  • Gọi điện đặt vé máy bay theo ngày, giờ, và địa điểm.
  • Gọi điện cho hãng taxi, hoặc dịch vụ vận chuyển để đón bạn lúc mấy giờ ở đâu?
  • Gọi điện cho khách sạn để đặt phòng vào lúc mấy giờ gì đó, ở bao lâu,...

Sau khi bạn đã đặt vé, đặt chỗ hết rùi, thằng giám đốc công ty nó giận nó ghét mấy hãng xe, máy bay, khách sản, hoặc có chỗ nào đó cho nó lợi ích lớn hơn chẳng hạn, nó yêu cầu bạn và đồng nghiệp bạn phải chuyển chỗ khác theo yêu cầu, sếp mà cấm cãi, vậy là bạn phải...

Đầu tiên gọi điện để hủy các dịch vụ mình đã đặt, và tiếp tục gọi điện liên hệ với các địa chỉ mới mà thằng sếp đưa.

Xét về khía cạch của bạn bạn có thể bạn sẽ gặp thêm nhiều khó khăn vì không quen thuộc với các nơi cung cấp dịch vụ mới này, và bạn phải phiền phà rất nhiều trong việc hủy các dịch vụ đã đăng ý, chưa kể nhiều khía cạch khác.

Xét về khía cách công ty thì sẽ rất phiền phức khi thông báo thay đổi lịch trình cho nhiều nhân viên công ty chưa kể tới việc không liên lạc được và nhiều vấn đề phát sinh rủi ro khác.

Cộng số lượng công việc phải làm của các nhân viên và công ty là rất lớn vì công ty phải liên hệ với từng nhân viên để thông báo thay đổi và từng nhân viên lại phải liên hệ với từng dịch vụ để đăng ký, và cực kỳ cực kỳ tốn nhiền thời gian.

Trường hợp 2:

Cũng gặp trường hợp tương tự như trường hợp 1 tuy nhiên lần công ty bạn có liên kết sử dụng dịch vụ một văn phòng quản lý, hay văn phòng đại diện gì đó sự thực hiện việc liên hệ sắp đặt dịch vụ cho bạn.

Với dịch vụ văn phòng đại diện này thì thằng giám đốc hay phòng kế toán có thể dễ dàng trong việc quản lý chi phí công tác vì mọi chi phi đi lại, ăn ở của nhân việc sẽ được gửi về cho công ty thanh toán, ngoài ra thằng giám đốc cũng dễ dàng chọn lựa các dịch vụ công ty mình.

Tất nhiên với các dịch vụ văn phòng đại diện này họ sẽ cung cấp nhiều dịch vụ liên hệ để thông báo công ty và nhân viên biệt lịch trình của họ như là thông qua internet, mạng điện thoại, dịch vụ tin nhắn, và thông qua đó bạn và đồng sẽ biết lịch trình như thề nào.

Bạn và đồng nhiệp sẽ không cần phải lên hay lập kế hoạch di chuyển gì hết, chỉ cần thông qua các kênh liên lạc kể trên bạn sẽ biết mình cần phải làm gi, dù cho công ty có thay đổi hãng dịch vụ thì bạn cũng chả cần quan tậm (trừ khi công ty cho dịch ăn ở, đi lại tê hơn thôi :)) ví dụ thự tế này.
  • Thông qua internet hoặc tin nhắn thông báo bạn sẽ biết thông tin lịch trình của mình.
  • Bạn ra sân  bay và tới hãng bay trong lịch trình thông báo để lấy vé máy bay.
  • Xuống sân bay có người đợi sẵn rước bạn về thăng khách sạn mà bạn không cần khách sạn đó ở đâu cũng được :))
  • Tới khách sạn chỉ cân báo tên là nhận phòng và ở.
Thấy không vô cùng phẻ và dễ dàng chẳng cần làm gì hết, bạn không cần liên hệ, không cần cãi cọ giá cả, không cần biết địa chỉ,... dịch vụ sẽ làm hết cho bạn.

Nói theo kiểu Dependency Injection sẽ là công ty tiêm vào bạn "dịch vụ văn phòng đại diện" và thông qua nó bạn sẽ giải quyết được rất nhiều công việc mà không biết nó thực hiện như thế nào.

Mình tính cho thêm một chút diễn giải thiên về lập trình nhưng thêm vào đây cho vẻ không hợp lắm cũng sẽ rất khó hiểu nếu không đưa ra mô tả và dẫn chứng chi tiết và code minh họa, nên để cho dành lại cho các bài sau, mình sẽ cố gắng viết về khái miện DI này cho từng ngôn ngữ riêng biệt, các bạn nhớ đón xem nhé.

Do mới tìm hiểu về DI được vài ngày, nên bài viết có thể bị thiết xót, hoặc mình đã hiểu nhầm ý nghĩa, nên rất mong sự đóng góp của các bạn đã có kinh nghiệm lâu năm về DI có thể cho mình ý kiến hoặc chỉ dẫn ^^! Xin cảm ơn.


Writer: +Bui Ngoc Son



http://blog.co-mit.com/post/13/Dependency+Injection+
http://puka.vn/forum/threads/dependence-injection-la-gi.559/
http://fsd14.com/post/114-dependency-injection-la-gi
https://toidicodedao.com/2015/11/03/dependency-injection-va-inversion-of-control-phan-1-dinh-nghia/
http://www.asp.net/mvc/overview/older-versions/hands-on-labs/aspnet-mvc-4-dependency-injection
http://blog.logiticks.com/autofac-an-open-source-dependency-injection-di/
http://codeopinion.com/throw-out-your-dependency-injection-container/

3 comments:

  1. Rất hay, cám ơn tác giả

    ReplyDelete
  2. Tìm hiểu về các loại gậy golf ở đây này: http://teeoffshop.com/762-gay.html

    ReplyDelete
  3. TvGolf-Booking, đơn vị chuyên cung cấp dịch vụ đặt sân chơi golf tốt nhất Việt Nam!!!

    ===> GIÁ RẺ CÙNG NHIỀU ƯU ĐÃI NHẤT, CẠNH TRANH NHẤT
    ===> THANH TOÁN TIỆN LỢI: Chuyển khoản ngân hàng hoặc thu tiền trực tiếp tận nơi
    ===> DỊCH VỤ HOÀN HẢO: Hỗ trợ khách hàng 24/7

    ===> Quý Golfer có nhu cầu vui lòng liên hệ Hotline 0963692783 để được hướng dẫn đặt sân.


    ReplyDelete