2009-06-04 33 views
18

Tôi đã đọc hơn Injection by HandNinjection (cũng như Why use Ninject). Tôi gặp hai mảnh của sự nhầm lẫn:Framework phụ thuộc: Tại sao tôi quan tâm?

  1. Các bơm bằng kỹ thuật tay tôi đã quen thuộc, nhưng tôi không quen thuộc với Ninjection, và do đó không chắc chắn cách chương trình hoàn toàn có thể làm việc. Có lẽ nó sẽ giúp cung cấp một chương trình hoàn chỉnh thay vì, như được thực hiện trên trang đó, hiển thị một chương trình chia thành từng mảnh

  2. Tôi vẫn chưa thực sự hiểu cách làm điều này trở nên dễ dàng hơn. Tôi nghĩ rằng tôi đang thiếu một cái gì đó quan trọng. Tôi có thể thấy cách một khung tiêm sẽ hữu ích nếu bạn đang tạo một nhóm tiêm và sau đó chuyển đổi giữa hai nhóm lớn cùng một lúc (điều này rất hữu ích cho việc chế nhạo, trong số những thứ khác), nhưng tôi nghĩ có nhiều hơn hơn thế. Nhưng tôi không chắc chắn những gì. Hoặc có lẽ tôi chỉ cần thêm ví dụ về lý do tại sao điều này là thú vị để lái xe về nhà điểm.

+1

Tôi vẫn không hiểu tại sao bạn không muốn tiêm thủ công – Casebash

Trả lời

6

Khi tiêm phụ thuộc của bạn mà không có khung DI, bạn kết thúc với mã mũi tên trên tất cả các ứng dụng của bạn cho các lớp biết cách xây dựng các phụ thuộc của chúng.

public Contact() 
     : this(new DataGateWay()) 
    { 
    } 

Nhưng nếu bạn sử dụng thứ gì đó như Ninject, tất cả mã mũi tên đều ở một nơi giúp dễ dàng thay đổi phụ thuộc cho tất cả các lớp sử dụng nó.

internal class ProductionModule : StandardModule 
{ 
    public override void Load() 
    { 
     Bind<IDataGateway>().To<DataGateWay>(); 
    } 
} 
1

Phun phụ thuộc bằng hầu hết các khung công tác có thể được định cấu hình trong thời gian chạy mà không yêu cầu biên dịch lại.

+0

Tôi không nghĩ điều đó thực sự đúng: thường nó có thể được tinh chỉnh tại thời điểm triển khai; hoặc nói chung, mà không cần biên dịch lại. Tôi có nghĩa là, hệ thống dây điện được thực hiện trong thời gian chạy, nhưng nó vẫn thường tĩnh. – StaxMan

2

Tôi thực sự thích khía cạnh tự động của một số khung công tác ... khi bạn không phải quan tâm đến những loại của bạn cần được khởi tạo.

EDIT: Tôi đọc this article by Ayende @ Rahien. Và tôi thực sự ủng hộ quan điểm của anh ấy.

+0

Bạn có thể giải thích chi tiết hơn không? – Brian

0

Tiêm phụ thuộc có thể thực sự thú vị nếu bạn nhận được mã của mình đến mức có rất ít phụ thuộc trong mã. Một số khung tiêm phụ thuộc sẽ cho phép bạn xác định các phụ thuộc của bạn trong một tệp cấu hình. Điều này có thể rất hữu ích nếu bạn cần một phần mềm thực sự linh hoạt cần được thay đổi mà không cần sửa đổi mã. Ví dụ, phần mềm dòng công việc là một ứng cử viên chính cho loại giải pháp này.

3

Nó cho phép bạn dễ dàng kiểm tra mã của bạn bằng cách chế nhạo các giao diện mà bạn cần cho một khối mã cụ thể. Nó cũng cho phép bạn dễ dàng trao đổi chức năng mà không vi phạm các phần khác của mã.

Đó là tất cả về sự gắn kết và khớp nối.

Bạn có thể sẽ không thấy lợi ích trên các dự án nhỏ, nhưng một khi bạn nhận được quá nhỏ, nó trở nên thực sự rõ ràng khi bạn phải thay đổi hệ thống. Thật dễ dàng khi bạn sử dụng DI.

+0

+1 để đề cập đến sự gắn kết và ghép nối - Tôi nghĩ đó là ý tưởng cốt lõi của việc sử dụng tiêm phụ thuộc - phát triển các thành phần có tính kết dính cao nhưng kết hợp lỏng lẻo. –

0

Tiêm phụ thuộc là điều cần thiết cho Component Driven Development. Sau này cho phép xây dựng các ứng dụng thực sự phức tạp một cách hiệu quả và đáng tin cậy hơn nhiều.

Ngoài ra, nó cho phép tách riêng các mối quan tâm chéo thông thường một cách rõ ràng khỏi mã khác (điều này dẫn đến việc sử dụng codebase linh hoạt hơn và có thể tái sử dụng).

liên kết liên quan:

4

tôi vẫn không thực sự có được cách này làm cho mọi thứ dễ dàng hơn. Tôi nghĩ rằng tôi đang thiếu một cái gì đó quan trọng.

Sẽ không nó sẽ là tuyệt vời nếu chúng ta chỉ có để phát triển các thành phần rời rạc trong đó mỗi cung cấp chức năng riêng biệt chúng ta có thể dễ dàng hiểu được, tái sử dụng và duy trì. Nơi chúng tôi chỉ hoạt động trên các thành phần.

Điều gì ngăn cản chúng tôi làm như vậy, chúng tôi cần một số cơ sở hạ tầng bằng cách nào đó kết hợp và quản lý các thành phần này thành ứng dụng hoạt động tự động. Cơ sở hạ tầng thực hiện điều này có sẵn cho chúng tôi - một khung IOC.

Vì vậy, khung IOC không phải là về quản lý các phụ thuộc hoặc thử nghiệm hoặc cấu hình. Thay vào đó, nó là về tính phức tạp của việc quản lý, bằng cách cho phép bạn chỉ làm việc và suy nghĩ về các thành phần.

Các vấn đề liên quan