Inversion of control là gì

     

1. Nguyên lý Inversion of Control là gì?

Trước lúc tới với định nghĩa Inversion of Control là gì? bạn hãy cùng tôi làm cho vài ly trà đá chém gió tí. Trong ghế nhà trường có lẽ người nào thì cũng sợ tuyệt nhất môn Triết học vì chưng mấy nguyên do, nặng nề hiểu (trìu tượng), những định nghĩa buộc phải học thuộc. Tuy vậy Triết học lại là công nghệ của rất nhiều khoa học cũng chính vì nó trìu tượng tại một tầng phía trên cao nhất. Bạn dạng thân tôi đã cùng đang quên toàn thể những gì học được (nói chính xác là trực thuộc được) trong Triết học ngay sau khi thi hoàn thành môn này, tuy nhiên kế tiếp 1 thời hạn khá lâu năm ngổn ngang toan lo với công việc and cuộc sống thường ngày thường ngày, đông đảo khái niệm, quy luật thời xưa thuộc trong Triết học tự nhiên cứ chờn vờn trong đầu and rồi ngẫm lại, đúng thật! Điểm lại chút về 2 nguyên lý, 3 quy luật & 6 cặp phạm trù trong Triết học, rất hoàn toàn có thể trong khu vực phạm vi gọi biết của tôi & những hưởng thụ đến hôm nay nó sẽ cũng trở nên toàn bộ những gì đã reviews phủ quanh ta. Sở dĩ viết vài câu chuyện phiếm tại vị trí này hầu chuyện vớ cả chúng ta vì các khái niệm mà bọn chúng ta đàm luận trong nội dung bài viết này tương đối là trìu tượng, nó giống như triết học tập là nguyên tắc của các nguyên lý. 1 giữa những quy hiện tượng mà tôi tốt chiêm nghiệm nổi trội là quy hiện tượng lượng chất:

Những căn sửa đơn giản và dễ dàng về lượng, mang lại một cường độ không vắt đổi, vẫn chuyển trở thành những sự biệt lập về chất.

Bạn đang xem: Inversion of control là gì

Bài Viết: Inversion of control là gì

Friedrich Engels

Bạn học một trang bị gì đấy, hoặc có tác dụng một đồ gì đó rất có thể không hiểu nhiều ngay nhưng đến lúc chứa một lượng kỹ năng, khiếp nghiệm trình độ chuyên môn không gắng đổi, các các bạn sẽ bất ngờ bất thần hiểu ra nó. Bởi thế, nếu những định nghĩa về Inversion of Control phía dưới đây vượt trìu tượng, khó khăn hiểu bạn cũng chớ quá âu yếm, mang lại một ngày nào đó khi họ lập trình đủ 100 Dự Án BĐS, có 10 năm “giờ bay” trong lập trình… tự nhiên và thoải mái sẽ hiểu. Chuyện phiếm vậy thôi, giờ họ cùng vào phần chủ yếu của nội dung bài viết nhé. Định nghĩa nguyên lý Inversion of Control

Inversion of Control (IoC) là một trong nguyên lý thi công trong công nghệ tiên tiến phần mềm với những đoạn code khi gửi vào trong số những framework sẽ nhận được luồng tinh chỉnh và điều khiển và tinh chỉnh và điều khiển từ framework tuyệt nói một chiêu trò khác là được framework tinh chỉnh và điều khiển và tinh chỉnh. Bạn dạng vẽ xây dựng phần mềm với thiết kế đó sẽ quần đảo ngược quyền điều khiển và điều khiển nếu như với lập trình sẵn hướng sách vở và giấy tờ thủ tương truyền thống. Vào lập trình truyền thống lịch sử các đoạn code thêm vào sẽ gọi những thư viện mặc dù vậy với IoC, framework đang gọi các mã thêm vào.

Martin Fowler

Nói thật, tôi cũng nỗ lực cố gắng đưa ra có mang này về ngữ điệu con bạn rất rất có thể hiểu được nhưng nó vẫn vượt trìu tượng hoặc bởi tôi chưa đủ “giờ bay” yêu cầu cũng chỉ tạm dừng chân tại một khái niệm như vậy. Tôi đã và đang thử tò mò các quan niệm khác bên trên Intenhưng cũng chỉ cảm nhận một câu: “Tốt nhất hoàn toàn có thể nhất bạn nên quên nó đi”. Lại nói đến chiêu bài bác nhận thức một vụ việc, theo chủ ý phép duy đồ vật biện chứng, vận động nhận thức của con fan đi trường đoản cú trực quan tràn trề đến bốn duy trừu tượng, & từ bốn duy trừu tượng mang đến thực tiễn. Nói kết luận nếu chúng ta lấn sảnh vào dòng định nghĩa chết tiệt này ngay thì là 1 trong trong không nên lầm đáng tiếc trong chiêu bài tò mò về một vụ việc.

Nói điêu thôi nhé, Triết học thời trước mình thi lại đến lần thứ 3 mới qua :).

2. Trực quan tấp nập về IoC

Inversion of Control là một trong trong sự “thi phường” giữa những việc giải phóng và không ngừng mở rộng một framework, một sệt tính trong số những framework. Chúng ta cùng xem một ví dụ đơn giản về chương trình nhập thông báo quý khách theo phong cách sách vở thủ tục truyền thống:

Khi chạy vận dụng này trong màn hình hiển thị hiển thị chiếc lệnh, các dòng code của không ít bạn đang có quyền quản lý và điều hành và kiểm soát, nó ra ra quyết định được lúc nào đặt câu hỏi, lúc nào đọc tài liệu người tiêu dùng nhập vào and khi nào giải quyết cùng xử lý những thành quả đó.


*

Thường xuyên, bọn họ viết lại ứng dụng thực hiện framework Laravel ở dạng bối cảnh đồ họa. Sự rất dị lớn tuyệt nhất giữa nhì ứng dụng đó là luồng tinh chỉnh và điều khiển và tinh chỉnh (flow of control). Vào chương trình dòng lệnh, chúng ta điều hành và kiểm soát được khi nào các phương pháp được gọi, nhưng mà trong trong chương trình dạng đồ họa thì không. Framework sẽ kiểm soát điều hành vấn đề đó bởi một vòng lặp tiếp tục kiểm tra xem có tài năng liệu nào được nhập vào không? Rất rất có thể bạn nhập nghề nghiệp và công việc và quá trình trước cơ hội nhập tên. Như vậy, vào ứng dụng thứ hai quyền tinh chỉnh và điều khiển và tinh chỉnh đã trở nên quần đảo ngược, quyền kiểm soát và điều hành đã được về framework.


*

Đây đó là 1 trong lấy ví dụ như trực quan tiền về nguyên tắc Inversion of Control, nguyên tắc này làm bạn ta tương tác đến một chế độ khi thao tác làm việc trong Hollywood “Đừng call cho bọn chúng tôi, shop chúng tôi sẽ hotline cho bạn”. Bạn đã phát âm được IoC là gì? tuy vậy tôi thì chưa, thật sự nó vẫn …éo thể đọc được. Vào thời điểm trong thời điểm tạm thời gác qua sự việc đó, những bạn phải thêm “lượng” để mang lại với bước nhảy vọt về “chất” sống cuối bài.


Một nổi trội đặc biệt quan trọng của framework là các phương pháp được quan niệm bởi người tiêu dùng thông thường xuyên được hotline từ trong phiên bản thân framework chứ chưa phải từ code áp dụng của khách hàng. Framework đóng tầm đặc trưng của lịch trình chính giữa những việc điều phối and thu xếp vận chuyển ứng dụng. Sự hòn đảo ngược quyền kiểm soát và điều hành này làm cho cho framework sức mạnh thể chất thông qua việc giải phóng và mở rộng. Các phương pháp được viết bởi quý khách định nghĩa những thuật toán trong framework cho 1 giám gần cạnh và đo lường cụ thể cụ thể. Inversion of Control cho thấy cảm thấy sự khác biệt giữa một framework & một thư viện.

Một thư viện chỉ cần tập hợp các tính năng mà bạn cũng luôn hoàn toàn có thể sử dụng, nó được tổ chứ thành các class. Sau các lần gọi một cách thức thức, thư viện vẫn khiến trong số những việc and kế tiếp trả quyền tinh chỉnh và điều khiển và tinh chỉnh về mang lại khách hàng.

Framework là 1 trong những trong thể hiện của xây đắp trìu tượng với khôn cùng nhiều hành động được ra đời sẵn phía trong, để áp dụng nó chúng ta phải chèn những hành động của người tiêu dùng vào các xung xung quanh vị trí biệt lập trong framework bằng những class hoặc plugin. Code của framework sẽ điện thoại tư vấn đến code của công ty tại mọi điểm rất đề xuất thiết.

Có vô số phương thức để các bạn đưa thêm mã vào framework, trong lấy một ví dụ trên họ sử dụng một textbox, bất kể khi nào, textbox phát hiện sự kiện người sử dụng nhập liệu, nó sẽ ảnh hưởng gọi tới những code trong 1 “bao đóng”. Một phương pháp khác để làm điều đây là để framework định nghĩa các sự kiện and code tín đồ sẽ ĐK vào các sự khiếu nại này. Vào Laravel, các bạn cũng luôn hoàn toàn có thể nảy sinh một sự kiện khi thao tác làm việc với 1 đoạn code của tôi & framework có cơ chế điều hành và kiểm soát các sự khiếu nại đó, xuất xắc nói giải pháp khác chúng ta đã ủy quyền ủy quyền lại mang lại framework.

Các phương pháp tiếp cận là vô cùng tốt, mà lại thỉnh thoảng bạn yêu cầu phối kết hợp nhiều lời gọi phương thức thức trong một đơn vị tính năng giải phóng và mở rộng, framework đề xuất định nghĩa một interface nhằm client code đề xuất xúc tiến nó cho những lời gọi phương pháp thức tác động hình ảnh hưởng. Đây đấy là nguyên lý đóng góp mở trong nguyên tắc SOLID cho kiến tạo hướng đối tượng người dùng fan sử dụng.

Sự thật các bạn nào đọc được đến quy trình này tôi yêu cầu rất cảm phục vì sự kiên định của bạn, tuy nhiên một lần nữa cặp phạm trù nguyên do and tác dụng rất đáng để nhằm để những bạn cần phải nỗ lực nuốm gắng. Nguyên do: các bạn kiên trì tống vào đầu mớ kim chỉ nan trìu tượng này, công dụng: mang đến cuối bài bác bạn đọc được “Inversion of Control là gì?”.

Trong cái trực quan có cái trực quan tiền hơn, vậy tìm cái tiện lợi nhất nhằm hiểu trước rồi gọi cái trở ngại vất vả sau. Nếu quý khách hàng đã khám phá sơ lược về IoC bên trên mạng, các các bạn sẽ thấy cảm thấy có cả một rừng những thuật ngữ tác động ảnh hưởng như Dependency Inversion Principle (DIP), Dependency Injection Pattern (DI), IoC Container. Khá là rất khó để nhận cảm nhận thấy các quan niệm này, những chúng ta phải một khẩu quyết ẩn chứa cả một tàng thư.

DI is about wiring, IoC is about direction, cùng DIP is about shape.

Xem thêm: Cách Lọc Tạp Âm Trong Ghi Âm, Cách Lọc Tạp Âm Trong Premiere

IoC là phía đi & DIP là tiến công giá cụ thể cụ thể của phía đi còn DI là 1 trong trong tiến hành cụ thể cụ thể.


*

Đến đây chắc các bạn đã ưng ý với tôi: “Inversion of Control là nguyên tắc của các nguyên lý”.

3. Inversion of Control được dựng nên như thế nào?

Nhiều lúc họ tự hỏi, các nguyên tắc như IoC, SOLID… được dựng nên như thế nào? lý do người ta rất hoàn toàn có thể nghĩ ra chúng? quay trở lại với lập trình hướng đối tượng người dùng người dùng fan sử dụng là một trong các chiêu bài giải quyết và xử lý các vụ việc theo tư duy hướng đối tượng người tiêu dùng người dùng fan sử dụng. Cách thức này tế bào phỏng cũng như trái đất quanh đó đời, vậy nên các nguyên lý thiết kế trong cuộc sống thường ngày thường ngày thật tuyệt vời và hoàn hảo nhất rất rất có thể đem vào vào lập trình. Tiếp sau chính là 1 trong ví dụ như tôi gọi được từ bỏ cuốn Dependency Injection in .NET, một cỗ sách phân tích và lý giải khá hay về các khái niệm IoC, DI, DIP…

Trong nguyên tắc ở đầu cuối Dependency Inversion của SOLID họ có nói đến một lấy một ví dụ về một cái đèn bàn gồm dây năng lượng điện được đấu nối trực tiếp vào ổ năng lượng điện trong tường mà hoàn toàn không qua ổ cắm & phích cắm, còn trong lấy một ví dụ này chúng ta thay nó bằng cái máy sấy tóc. Điều khiếu nại này mang lại thấy cảm thấy vụ việc rất lớn khi các đối tượng người dùng người dùng người sử dụng phụ thuộc vào nghiêm ngặt cùng với nhau vào thi công.


*

Trong 1 lần đi nhà nghỉ cùng bạn gái (giả tưởng thôi nhé), bản thân đã bất ngờ khi nhìn thấy cảm thấy hình ảnh chiếc sản phẩm công nghệ sấy được nối thẳng vào trong ổ năng lượng điện mà hoàn toàn không trải qua ổ cắm & phích cắm. Phương châm thì vẫn rõ, hầu như kẻ ưng ý táy máy đã “tắt điện” khi quan sát thấy cảm nhận thấy cảnh này. Cơ mà chuyện gì đang xẩy ra khi cái máy sấy này hỏng, dù nó có là hàng Nhật xịn nhưng cũng luôn luôn có các lúc lỗi chứ.


*

Để sửa chữa thay thế là khá trở ngại vất vả, trước tiên những bạn cần phải ngắt át-tô-mát, kế tiếp mở dòng tủ điện ra & thay chiếc máy sấy mới vào. Ông thợ nào không cảnh giác rất hoàn toàn có thể không nhảy điện lên để thử nghiệm xem cái máy mới thay gồm vận rượu cồn không. Vào lập trình cũng tương tự vậy, nếu những module phụ thuộc vào nghiêm ngặt vào nhau (thường cần sử dụng thuật ngữ tightly coupled) thì cơ hội một module bao gồm vụ việc, cả mạng lưới hệ thống sẽ rối tung, rất khó để bảo trì and cách tân và phân phát triển.


Nhiều lúc, chẳng ai chạy dây những thiết bị điện trực tiếp vào mạng lưới khối hệ thống điện, núm vào chính là sử dụng một phích cắm và ổ cắm. Một ổ cắm là một trong interface với chuẩn cắm phải hợp lí với tầm dáng phích cắm. Như vậy, thiết bị sấy tóc với ổ cắm và phích cắn đã tạo thành một link không phụ thuộc (loosely coupled). Rất có thể có vô số cách thức phối kết hợp các thiết bị năng lượng điện này với nhau để ra một mạng lưới hệ thống. Vào lập trình bài toán phối phối kết hợp này rất có thể đối chiếu cùng với design patterncác nguyên tắc thi công.

Máy sấy tóc sẽ bên cạnh đó không liệu có còn điều gì khác khác buộc ràng với mạng lưới hệ thống điện, giả dụ những bạn phải ổ điện đến máy vi tính, đơn giản và dễ dàng là rút thứ sấy ra & cắm sản phẩm công nghệ vi tính vào ổ cắm. Những nhà kiến thiết ổ cắm không chăm lo đến thiết bị điện auto vi tính, điện thoại, tivi… nhưng các thiết bị đó vẫn vận động rất tốt khi gặm vào. Các thiết bị khác hoàn toàn rất hoàn toàn có thể cắm vào ổ cắm mà trọn vẹn không tác động gì giống như như nguyên tắc thay thế sửa chữa Liskov trong xây cất phần mềm. Trong Dependency Inject, nguyên tắc Liskov là 1 trong trong một trong những nguyên lý quan tiền trọng, nó có thể chấp nhận được thỏa mãn nhu yếu những nhu yếu sau đây thậm chí còn họ không biết đến gì về nó vào hôm nay. Hệt như như vào thực tế, giả dụ 10 năm nữa có một lắp thêm điện mới thì nó vẫn cắm vào dòng ổ cắm đó mà không quan trọng phải căn chỉnh phía trong.


Khi pin trang bị vi tính đầy, các bạn sẽ rút phích cắm của sản phẩm máy vi tính ra and chuyển lịch sự cần áp dụng pin. Vào lập trình, họ luôn nhu cầu một service/module/class nào chính là đang nghỉ ngơi và có tác dụng việc, nếu phần tử này đã có được gỡ bỏ, họ sẽ bắt gặp lỗi NullReferenceException, với tình huống này bọn họ sẽ làm cho được 1 interface cơ mà nó không làm hầu hết gì. Đây đó là 1 trong design pattern được nghe biết với tên là Null Object, nó thỏa mãn nhu cầu việc rút phích cắm thoát thoát ra khỏi tường.


Mọi điều rất rất có thể xẩy ra, ví như như mạng lưới hệ thống điện của toàn bộ khu đang gặp gỡ vụ việc, các bạn sẽ cần mang đến một cỗ lưu năng lượng điện UPS nhằm vẫn chuyển động được thêm 1 thời gian. Sản phẩm công nghệ máy vi tính & bộ giữ điện gồm những trách nhiệm khác biệt, đây đó là nguyên lý đơn tác dụng (single responsibility) trong kiến thiết phần mềm. Cả UPS and máy vi tính đông đảo được cung cấp bởi những nhà máy thêm vào khác biệt, được sở hữu ở số đông thời gian khác biệt nhưng rất có thể sử dụng phối phối kết hợp được với nhau, thậm chí còn các bạn cũng luôn hoàn toàn có thể cắm cả sản phẩm công nghệ sấy tóc khi lắp thêm vi tính không cắn vào cỗ lưu điện.


Một thực tiễn là các lời khuyên kiến nghị luôn luôn căn sửa, các mạng lưới khối hệ thống luôn giải phóng và mở rộng and đề xuất thêm tính năng, việc giải phóng và không ngừng mở rộng thỉnh phảng phất chỉ là chiêu bài lắp ghép các bộ phận với nhau theo các cách khác biệt. Decorator pattern là mẫu lập trình giúp thêm tính năng cho một class mà trọn vẹn không cần viết lại hoặc căn sửa các code gồm sẵn. Một chiêu thức khác để thêm tính năng vượt trội vào một trong những code có sẵn là tổ hợp các implement hiện có cửa một interface sử dụng Composite pattern. Với sự sử dụng ổ cắm dài, những chúng ta có thể thêm vào hoặc sút đi những thiết bị điện buộc phải chạy. Với cùng chiêu bài này Composite pattern dễ dãi và dễ dàng và đơn giản thêm bớt tác dụng bằng giải pháp căn sửa tập các interface.


Nhiều lúc bọn họ có một vật dụng được cài ở quốc tế với chuẩn đầu cắn khác với ổ cắm đang sẵn có, những bạn phải một cỗ chuyển đổi. Adapter pattern cũng thực hiện cùng một trách nhiệm với các bộ chuyển đổi. Chỉ với một ví dụ thực tế về mạng lưới khối hệ thống điện đối kháng giản, chúng ta đã thấy cảm nhận thấy có không hề ít các ý tưởng sáng tạo đã được tiến hành ở trong trái đất hướng đối tượng người dùng người tiêu dùng trong lập trình.


4. Lý do cần sử dụng Inversion of Control

Chuyện phiếm, bố hoa kèm theo theo bao nhiêu cốc trà đá rồi nhưng mà vẫn vẫn không còn gì hiểu được đang nói đến cái gì? Hic…

Ngay chính trong quan niệm Inversion of Control đang nói nên mục tiêu chính của nguyên lý này đó là tính hóa giải và mở rộng của 1 mạng lưới hệ thống. Quay trở về với câu chuyện về lắp thêm sấy tóc, các kiến tạo ở bên cạnh đời giúp cho việc giải phóng và không ngừng mở rộng một mạng lưới khối hệ thống là quá 1-1 giản. Trong lập trình cũng như vậy, nhờ triển khai những tiến công giá cụ thể cụ thể từ các nguyên lý, một mạng lưới hệ thống ứng dụng sẽ sở hữu được tính giải phóng với mở rộng. Nhưng mà để đạt được tính giải phóng và không ngừng mở rộng cho giữa những phần mềm thì thứ nhất ứng dụng này cần loại trừ sự phụ thuộc vào giữa một đối tượng người tiêu dùng người dùng người sử dụng này với 1 đối tượng người dùng người dùng người tiêu dùng khác.

Tính hóa giải và không ngừng mở rộng rất rất có thể giải phóng và mở rộng ra không những thế ở khía cạnh bảo trì and cách tân và cải tiến và phát triển ứng dụng. Một mạng lưới hệ thống được thiết kế với với dễ dàng sẽ dễ dàng giải phóng và mở rộng hơn một mạng lưới hệ thống khó khăn vất vả. Không những thế các mạng lưới khối hệ thống sử dụng nguyên lý Inversion of Control sẽ dễ dàng và đơn giản và dễ dàng trong kiểm thử ứng dụng do các bộ phận có sự hòa bình không cố kỉnh đổi.

Xem thêm: Trứng Gà Ngâm Rượu Nếp Cho Bà Đẻ Bổ Dưỡng, Cách Làm Trứng Gà Ngâm Rượu Nếp Cho Bà Đẻ

5. Quán mang đến giờ đóng cửa, hết trà đá!

“Em ơi! Anh thêm cốc nữa đê…”, ko một giờ đáp lại, miệng khô đắng, giọng gằn lên “Chủ quán…”, mịa nó chứ vẫn lạng lẽ như tờ, cúi người xuống định vớ đại bé Chaco 81 lỗ quăng vào… Úi quá nửa đêm roài, con mưa tác động bão đã và đang tạnh, chưa đến chút gió vi vu… “Quán đến giờ đóng góp cửa, không còn trà đá!” giọng nói lanh lảnh chứa lên khởi nguồn từ một gương mặt bây bi con bà chủ quán.

Mải bố hoa, giờ bắt đầu nhớ ra, mới được nửa phần đường từ trực quan lại đến tư duy trìu tượng. Nạm còn từ bốn duy trìu tượng đến thực tiễn, thôi hứa bữa không giống mạn đàm tiếp…

Thể Loại: share Kiến Thức cộng Đồng


Bài Viết: Inversion Of Control Là Gì, Inversion Of Control, Di Là Gì

Thể Loại: LÀ GÌ

Nguồn Blog là gì: https://vincitysdaimo.com Inversion Of Control Là Gì, Inversion Of Control, Di Là Gì