2008-11-20 42 views
6

Có bất kỳ tiện ích nào có thể kiểm tra một tập hợp các hội đồng quản lý và cho bạn biết liệu bất kỳ loại nào trong một không gian tên có phụ thuộc vào không gian tên khác không? Ví dụ, giả sử tôi có một không gian tên MyApp.BusinessRules và không muốn nó truy cập trực tiếp vào bất cứ thứ gì trong MyApp.GUI, nhưng cả hai không gian tên đều nằm trong cùng một assembly. Mục tiêu của tôi là có thể viết một nhiệm vụ MSBuild tùy chỉnh để xác minh rằng các quy tắc ghép nối khác nhau đã không bị hỏng.Phát hiện các phụ thuộc giữa các không gian tên trong .NET

Cho đến nay, công cụ duy nhất tôi gặp phải có vẻ như đây có thể là NDepend, nhưng tôi tự hỏi liệu có giải pháp đơn giản hơn không.

+0

Bạn có lấy thêm bất kỳ thông tin về vấn đề này, hoặc đã thành công trong việc tạo ra build này nhiệm vụ? Tôi rất quan tâm đến tính năng cụ thể này. – MHGameWork

Trả lời

1

Cho đến nay, công cụ duy nhất tôi gặp phải có vẻ như đó là NDepend, nhưng tôi tự hỏi liệu có giải pháp đơn giản hơn không.

Tôi là một trong những nhà phát triển của công cụ NDepend. Bạn có thể cho chúng tôi biết những gì bạn thấy phức tạp trong NDepend và cách bạn tưởng tượng một giải pháp đơn giản hơn cho bạn?

NDepend đi kèm với 3 cách khác nhau để làm những gì bạn muốn: Dependency Matrix, Dependency Graph và bạn cũng có thể viết một số Code Rule over LINQ Query (CQLinq) và quy tắc detect cycle between namespaces hoặc thực thi một số phụ thuộc cụ thể.

Ví dụ: giả sử tôi có vùng tên MyApp.BusinessRules và không muốn nó truy cập trực tiếp vào bất kỳ thứ gì trong MyApp.GUI, nhưng cả hai không gian tên đều nằm trong cùng một assembly.

Cho rằng, các quy tắc CQLinq sau đây có thể được viết, nó có thể là bất kỳ đơn giản hơn mà ?:

warnif count > 0 
let businessRules = Application.Namespaces.WithNameLike("^MyApp.BusinessRules") 
let gui = Application.Namespaces.WithNameLike("^MyApp.GUI") 

from n in businessRules.UsingAny(gui) 
let guidNamespacesUsed = n.NamespacesUsed.Intersect(gui) 
select new { n, guidNamespacesUsed } 
+0

Chúng tôi đã tải xuống NDepend một thời gian trước đây để đánh giá nó. Có rất nhiều điều cần tìm hiểu và tôi vẫn đang nắm bắt được ý nghĩa của ma trận. Tôi sẽ được quan tâm để xem nếu tôi có thể viết CQL để truy vấn phụ thuộc cụ thể giữa các không gian tên. –

+0

Đánh dấu, tôi đã tái cấu trúc câu trả lời của mình với khả năng CQLinq NDepend v4 mới. Hy vọng rằng, bây giờ nó chưa bao giờ được đơn giản hơn để làm những gì bạn đang yêu cầu trong câu hỏi này. –

3

Tôi nghi ngờ NDepend sẽ là cách đơn giản nhất để đi, thành thật mà nói.

Tuy nhiên, nếu bạn thực sự không muốn bit của một cụm từ tham chiếu với nhau, bạn nên gần như chắc chắn chia lắp ráp thành các đơn vị hợp lý hơn.

+0

có, tôi muốn phá vỡ các hội đồng, nhưng Visual Studio thực hiện thực sự xấu khi bạn bắt đầu có hơn 40 dự án trong giải pháp của bạn (đặc biệt là khi máy dev của bạn là 5 tuổi) –

+0

Bạn sẽ có thể thực hiện trường hợp cho một bản cập nhật cho máy dev của bạn sau đó ... và suy nghĩ về việc liệu bạn có cần tất cả những dự án đó trong cùng một giải pháp hay không. Nghe có vẻ như bạn đã có 1 dự án ở đây mà nên là hai - bạn có những người khác nên được kết hợp? –

+0

cũng thực thi một WinForms lớn, lưu trữ 8 hoặc 9 ứng dụng phụ, vì vậy khi bạn đã đưa mã chia sẻ vào các thành phần có thể tái sử dụng và thêm một số đơn vị kiểm tra đơn vị, số lượng dự án khá cao. –

0

Trình phản xạ thực hiện việc này.

Không gian tên nhấp chuột phải, nhấp vào Phân tích, viola! :)

+0

một mẹo hữu ích nhưng dường như chỉ hiển thị những gì cụm không gian tên của tôi phụ thuộc vào, không phải là không gian tên –

2

Bạn có thể phân tích phụ thuộc không gian tên với DSM plugin cho NET Reflector (tôi nó nhà phát triển)

Khi các hội đồng được phân tích, bạn có thể lưu dự án vào một tệp. Tập tin này chỉ là XML với cấu trúc đơn giản để bạn có thể vượt qua nó để một kịch bản để phân tích tùy chỉnh

[Cập nhật]: Plugin này bây giờ đã có trong hình thức của một Visual Studio Add-In

+0

Plugin này là tuyệt vời, tôi đã chỉ được sử dụng nó để phân tích và refactor một dự án lớn lao và nó cung cấp chính xác các thông tin bạn cần. Cảm ơn! – Dave

1

Bạn có thể thử bản phát hành RC của Visual Studio 2010 Ultimate để tạo biểu đồ phụ thuộc cho mã .NET. Bạn có thể tạo một biểu đồ của tất cả các assembly, các không gian tên, các lớp hoặc một số kết hợp của chúng, hoặc bạn có thể sử dụng Architecture Explorer để chọn các tạo phẩm cụ thể và các mối quan hệ mà bạn muốn hình dung.

Bạn cũng có thể tạo sơ đồ lớp từ đồ thị phụ thuộc hoặc từ vật đang tồn tại, rút ​​ra các phụ thuộc được phép, và sau đó bao gồm xác nhận lớp như là một phần của quá trình MSBuild để đảm bảo phụ thuộc không hợp lệ không được giới thiệu:

Làm thế nào để: Tạo tài liệu graph từ mã: http://msdn.microsoft.com/en-us/library/dd409453%28VS.100%29.aspx#SeeSpecificSource

Bạn có thể sử dụng Visual Studio Ultimate để khám phá những mối quan hệ và tổ chức trong mã hiện có bằng cách tạo tài liệu đồ thị có hướng. Các biểu đồ này đại diện cho các phần tử mã và mối quan hệ của chúng dưới dạng một tập hợp các nút được kết nối bằng các liên kết hoặc các cạnh. Bạn có thể sử dụng các biểu đồ này để giúp bạn trực quan hóa, khám phá và phân tích mã.

Làm thế nào để: Tìm Mã Sử dụng Kiến trúc Explorer: http://msdn.microsoft.com/en-us/library/dd409431%28VS.100%29.aspx

Bạn có thể chọn các mặt đứng hoặc "lát" mã mà bạn muốn hình dung bằng cách sử dụng Kiến trúc Explorer. Bạn có thể khám phá mã nguồn trong giải pháp Visual Studio hoặc mã được quản lý được biên dịch trong các tệp .dll hoặc tệp .exe. Bạn có thể sử dụng Kiến trúc Explorer để duyệt qua các miền khác bằng cách cài đặt các nhà cung cấp bổ sung. Khi bạn tìm thấy mã mà bạn muốn trực quan hóa, bạn có thể tạo biểu đồ để khám phá các mối quan hệ trong mã đó.

Làm thế nào để: Tạo lớp Sơ đồ từ Artifacts: http://msdn.microsoft.com/en-us/library/dd465141%28VS.100%29.aspx

... sơ đồ lớp sử dụng để hình dung các kiến ​​trúc cao cấp của hệ thống của bạn và để xác minh rằng mã tuân thủ này thiết kế. Để thực hiện tác vụ này, hãy tổ chức và liên kết các hiện vật từ một giải pháp Visual Studio thành các nhóm, nhóm trừu tượng hoặc hợp lý. Các lớp này mô tả các tác vụ chính mà các tạo phẩm này thực hiện hoặc các thành phần chính của hệ thống của bạn. Các mũi tên giữa các lớp thể hiện các phụ thuộc lẫn nhau tồn tại hoặc phải tồn tại giữa các hiện vật này. Để thực thi các ràng buộc kiến ​​trúc trên mã, mô tả các phụ thuộc dự định trên sơ đồ và sau đó xác thực mã đối với biểu đồ. Bằng cách sử dụng sơ đồ lớp theo cách này, bạn có thể giúp làm cho mã dễ hiểu hơn, sử dụng lại và duy trì.

Layer Diagram http://i.msdn.microsoft.com/Dd465141.UML_LayerRefReading(en-us,VS.100).png

Làm thế nào để: Validate Mã Against lớp Sơ đồ: http://msdn.microsoft.com/en-us/library/dd409395%28VS.100%29.aspx

Members mã chống lại một sơ đồ lớp giúp bạn thực thi hạn chế kiến ​​trúc trên mã như nó phát triển. Khi bạn thực hiện nhiệm vụ này, các phụ thuộc trong mã được so sánh với các phụ thuộc trên biểu đồ.

RC tải xuống: http://www.microsoft.com/downloads/details.aspx?displaylang=en&FamilyID=457bab91-5eb2-4b36-b0f4-d6f34683c62a.

Visual Studio 2010 kiến ​​trúc Discovery & Modeling Công cụ diễn đàn: http://social.msdn.microsoft.com/Forums/en-US/vsarch/threads

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