2011-08-12 30 views
6

Gần đây tôi đã đi từ một nhóm sử dụng Ninject trong ASP.Net MVC để tiêm phụ thuộc vào một nhóm không biết gì về giải pháp IoC bên cạnh mẫu mô hình nhà cung cấp đã được giới thiệu trong ASP.Net 2.0.Tại sao sử dụng mô hình nhà cung cấp trong ứng dụng ASP.Net MVC của greenfield có cảm giác ngược?

Tôi đã cố gắng tìm một quy trình làm việc tốt để làm việc với mô hình nhà cung cấp, nhưng mỗi khi tôi thực sự nhận được mã hóa, chủ yếu là cảm thấy như mô hình đang cản đường và cảm thấy như tôi bị phân tâm. với nhau copypasta mặt tiền tĩnh khi tôi có thể nhận được công việc làm thay vào đó.

Bây giờ tôi đang bắt đầu một dự án xanh nhỏ ASP.Net MVC, và tìm kiếm sự kháng cự từ một số thành viên trong nhóm để áp dụng khung DI.

Tôi biết rằng khuôn khổ DI cảm thấy nhanh hơn và dễ dàng hơn so với viết chống lại mô hình nhà cung cấp, nhưng bị kẹt lại chi tiết mỗi lần tôi cố gắng trình bày lý do tại sao.

Ai có thể mô tả sự khác biệt khách quan giữa hai cách tiếp cận và tại sao viết chống lại mô hình nhà cung cấp trong môi trường nơi container có thể dễ dàng được khởi động trong có vẻ lạ?

+0

gì là một dự án Greenfield, chỉ tò mò –

+0

Greenfield có nghĩa là một dự án mới với không có gì tạo ra. –

+2

Ý của bạn là gì, "viết chống lại mô hình nhà cung cấp"? Tôi đã thực hiện .NET kể từ ngày 1 và chưa bao giờ "viết chống lại mô hình nhà cung cấp" theo hiểu biết tốt nhất của tôi. –

Trả lời

2

Provider idiom is, at best, a design smell. Tốt nhất là tránh nó hoàn toàn.

Tiêm phụ thuộc, mặt khác, chỉ đơn giản là the most efficient way to enable loose coupling. Nếu bạn muốn viết mã duy trì, đó là một trong những cách hiệu quả nhất để đạt được mục tiêu đó.

Tuy nhiên, hầu hết mọi người có xu hướng chống lại DI bởi vì nó 'cảm thấy' ngược lại, nhưng nó thực sự là một cái gì đó chỉ cần để có được hơn.

1

Tôi nghĩ cách quảng cáo chiêu hàng có thể là nếu bạn muốn có thể kiểm tra đơn vị mã của mình, bạn cần trừu tượng tất cả các phụ thuộc khỏi những gì bạn đang thử nghiệm. Bạn có thể làm điều đó với mô hình nhà cung cấp nhưng điều đó có nghĩa là cần phải đi qua các nhà cung cấp nhiều hơn bạn có thể muốn giải quyết.

Cho phép nói rằng bạn có một ứng dụng gọi một số dịch vụ bên thứ ba bên ngoài mà còn có cơ sở dữ liệu cục bộ. Bộ điều khiển của bạn đôi khi gọi một "Nhà cung cấp" (đối với các dịch vụ bên ngoài) nhưng đôi khi gọi một "kho lưu trữ" cho cơ sở dữ liệu cục bộ. Vì vậy, làm thế nào bạn sẽ đơn vị kiểm tra các phương pháp gọi một kho lưu trữ? Tôi đoán bạn cần phải trừu tượng toàn bộ cơ sở dữ liệu cục bộ của bạn thông qua các nhà cung cấp. Trong trường hợp này, bạn sẽ kết thúc với một hoặc hai nhà cung cấp khổng lồ implementn (thiết kế kém để có quá nhiều phương thức cho mỗi lớp), hoặc bạn sẽ kết thúc với rất nhiều nhà cung cấp nhỏ (cấu hình cơn ác mộng).

Với một thùng chứa IOC, bạn có thể thực hiện hầu hết các hệ thống dây điện trong chính mã. Sử dụng một khung mocking làm cho Unit Testing trở nên dễ dàng. Vì vậy, nếu bạn thực sự muốn, bạn có thể sử dụng Nhà cung cấp cho "cuộc gọi bên ngoài" và IOC cho "cuộc gọi nội bộ".

Tôi chỉ đang trong quá trình suy nghĩ về điều này bởi vì chúng tôi có rất nhiều mã cũ trong các nhà cung cấp và tôi đang nghĩ đến việc di chuyển ra khỏi chúng và chỉ sử dụng IOC thẳng. Tôi tin rằng các container IOC như AutoFac có thể tái tạo yêu cầu có thể "cắm vào" một cách triển khai khác thông qua cấu hình, vì vậy bạn không thực sự mất bất cứ thứ gì.

Đọc thêm về bài đăng blog của tôi - hy vọng blog sẽ nhận được một số ý kiến ​​tốt về nó quá: http://healthedev.blogspot.com/2011/12/making-custom-built-applications.html

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