13

Trong dự án cuối cùng của tôi, chúng tôi sử dụng MSBuild làm ngôn ngữ kịch bản. (vâng, thực sự!) Chúng tôi cũng đã viết hàng trăm tác vụ MSBuild tùy chỉnh, cho các phần có ý nghĩa hơn trong C#. (Tôi thậm chí đã viết một nhiệm vụ MSBuild để tạo mã boilerplate cho một nhiệm vụ MSBuild. Có, nó tự tiêu thụ.)Cách tốt nhất để quản lý cây phụ thuộc trong .NET là gì?

Mặc dù tôi không đề nghị bất kỳ ai khác sử dụng cùng cách tiếp cận này, một trong những điều tôi thấy rất hữu ích là quản lý phụ thuộc được tích hợp sẵn. Như bạn mong đợi, thật dễ dàng để thể hiện mối quan hệ phụ thuộc và để MSBuild chăm sóc họ. Ví dụ: hầu như mọi bước trong phần mềm của chúng tôi đều yêu cầu phải sao chép một số tệp nhất định vào một vị trí nhất định. Bạn có thể dễ dàng viết:

Step1: CopyFiles 
Step2: CopyFiles, Step1 

và khi bạn thực hiện Step2, nó sẽ chỉ sao chép tệp một lần.

Xây dựng và đáp ứng cây phụ thuộc khá phổ biến trong phần mềm. Tôi muốn nhóm MSBuild sẽ lấy mã quản lý phụ thuộc của họ, tách nó ra khỏi MSBuild, và di chuyển nó vào .NET Framework, nơi bất cứ ai cũng có thể sử dụng nó. Baring rằng, bạn nghĩ gì là lựa chọn tốt nhất để quản lý các phụ thuộc theo cách này?

Trả lời

5

Tôi nghĩ bạn có thể sử dụng một thùng chứa IOC như Spring để có được loại hành vi này.

Khởi tạo bất kỳ tác vụ nào chỉ được chạy một lần dưới dạng singleton và có hàm tạo của đối tượng nhiệm vụ chạy tác vụ. Sau đó, bất kỳ đối tượng nào đi kèm sau đó với sự phụ thuộc vào nhiệm vụ đó sẽ nhận được một tham chiếu đến tác vụ đã chạy và có thể nhận được kết quả của tác vụ đó hoặc có thể suy ra rằng tác vụ đó đã được chạy thành công.

Trong cấu hình mùa xuân, bạn sẽ kết thúc với nhiều nhiệm vụ xích lại với nhau, mỗi tham chiếu đến các tác vụ khác trong cấu hình hàm dựng của nó. Cách tiếp cận này linh hoạt nhất và bạn không bị giới hạn trong "nhiệm vụ" hoặc bất kỳ thứ gì quá nặng đối với vấn đề đó.

Tôi đoán bất kỳ thư viện quy trình làm việc nào cũng có khái niệm tương tự. Nhưng tôi không thực sự quen thuộc với những điều này.

Tôi nghĩ mọi thứ nhỏ hơn, mọi người chỉ cần cuộn biểu đồ và giao diện đối tượng của riêng mình bằng mẫu khách truy cập và có thể là từ điển để giữ trạng thái.

1

Hãy xem dự án Refix trên CodePlex. Nó là viết tắt của REference FIX và nó hoạt động rất độc đáo.