2011-11-16 39 views
8

Tôi biết rất nhiều câu hỏi liên quan đã được đưa ra trên SO, nhưng tôi đã không thể tìm thấy bất cứ điều gì hoàn toàn thỏa đáng - có lẽ vì yêu cầu của tôi hơi khác so với mỗi câu hỏi nêu ra.Công cụ phụ thuộc lớp cho Java

Tôi có một khối mã khổng lồ mà tôi muốn chia nhỏ thành các đơn vị logic nhỏ hơn. Để làm điều này, tôi cần phải tìm tất cả các phụ thuộc rối/tròn và giải quyết chúng. Do kích thước của spaghetti hiện tại, chiến lược khả thi duy nhất dường như là phân chia và chinh phục, vì vậy tôi cần phải chia dự án lớn thành từng miếng nhỏ hơn hoặc bóc ra các phần độc lập và giải quyết các phần nhỏ hơn một cách riêng biệt.

Hầu hết các công cụ tôi có thể tìm ra dường như chỉ hoạt động ở cấp lớp hoặc gói, nhưng chúng dường như không hỗ trợ khái niệm về các gói con. Ví dụ, nếu tôi có một gói gốc, 3 gói dưới đó, và sau đó 5 gói con dưới mỗi của 3, sau đó tôi sẽ nhận được 1 + 3 + 15 = 19 gói, mà sẽ cho tôi một đồ thị phức tạp điên cuồng. Bây giờ những gì tôi hy vọng có thể làm là phân tích mối quan hệ phụ thuộc giữa 3 gói mức cao nhất trước (số gói đến/đi, và lớp nào bắt nguồn từ những phụ thuộc này), làm sạch nó ở mức đó, trước khi đi sâu vào các gói cấp độ hoạt động ở cấp độ tiếp theo.

Bây giờ, tôi đã sử dụng Cấu trúc 101 cho mục đích này và nó hoạt động rất tốt, nhưng khi hết thời gian dùng thử, giá của sản phẩm hơi dốc đối với ngân sách của tôi. Có giải pháp nguồn mở/miễn phí không?

Cảm ơn trước!

Trả lời

5

Theo hiểu biết của tôi, không có công cụ miễn phí nào có thể so sánh từ xa với structure 101. (Tôi không liên kết!)

Vì vậy, bạn đã có giải pháp, nhưng bạn nói giá cả quá cao. Đây có thể là sai lầm.

Tôi có một khối mã khổng lồ mà tôi muốn chia nhỏ thành các đơn vị logic nhỏ hơn.

Có lẽ bạn không làm điều này cho vui nhưng ai đó đang trả tiền để bạn làm điều đó. 900 USD cho cấu trúc 101 là khoảng 3-4 ngày làm việc - giả sử bạn kiếm được khoảng 40.000 HKD (5200 USD) mỗi tháng với tư cách là nhà phát triển phần mềm cao cấp ở Hồng Kông. Nó có thể làm cho lập luận rằng điều này thực sự sẽ tiết kiệm rất nhiều tiền cuối cùng.

+0

Kinh tế không phải là về 'tiết kiệm' nhưng 'tối ưu hóa'. – DerMike

+1

Tôi đồng ý, nhưng trong tiếp thị bạn luôn "tiết kiệm tiền" ngay cả khi bạn chi tiêu :-) –

+0

Cảm ơn. "trả tiền cho những gì bạn nhận được" là điểm chính xác ở đây. Bạn thấy đấy, tôi đồng ý rằng cấu trúc 101 là một tác phẩm tuyệt vời, nhưng nó còn nhiều hơn những gì tôi cần, nên giá tôi sẽ phải trả cho nó chỉ mua cho tôi thứ gì đó đáng giá hơn thế. Tôi không tìm kiếm phần mềm do-it-all đầy đủ tính năng. Tôi đã tìm thấy một vài lựa chọn thay thế mà hầu như làm tất cả những gì tôi cần, và nó chỉ là "bao gồm cả subpackages" bit mà hầu hết trong số họ dường như không làm mà không tấn công tôi như là "thách thức". Vì vậy, tôi nghĩ rằng ai đó ra khỏi đó phải đã làm cho nó có sẵn. – RAY

1

bản dùng thử JAVADepend cung cấp khả năng phân tích mối quan hệ phụ thuộc bạn muốn mà không giới hạn thời gian.

đó là một công cụ tuyệt vời.

+0

Sẽ không xảy ra là phiên bản trả tiền rẻ hơn một chút do cơ hội nào? – clinux

1

Hãy xem CodePro Analytix. Nó có một số công cụ cho dependency analysis cộng với tấn những thứ khác mà bạn nên biết.

Để phân tích ngoại tuyến, hãy xem SonarQube. Nó không có đồ thị phụ thuộc nhưng có một mô-đun cho các chu kỳ phụ thuộc trong các lớp của bạn cộng với một tấn các mô-đun đo lường chất lượng.

0

Bạn đã xem xét trình cắm ObjectAID hoặc PlantUML cho nhật thực chưa? Không mạnh mẽ như những gì bạn đang yêu cầu, nhưng chắc chắn cung cấp một số cơ chế mô hình hóa UML tốt miễn phí.

0

Disclaimer: Tôi là tác giả của coffea

tôi đã dạy tôi nên chia sẻ, kể từ khi tôi đang phải đối mặt với một vấn đề tương tự, một lần nữa (tức là một codebase khổng lồ với đa cấp, phụ thuộc gói phức tạp và khó bất kỳ cấu trúc nào) và tôi không biết về bất kỳ miễn phí lựa chọn thay thế nào có sẵn cho thời điểm này.

Theo ý kiến ​​của tôi, không có gì đánh bại kịch bản và/hoặc quy tắc nhóm rõ ràng khi xử lý cấu trúc gói hỗn độn, và vì tôi không tìm được cách nào hợp lý để làm điều này trước đó, tôi đã tự mình ra tool.

Tất nhiên, điều này sẽ không đánh bại bất kỳ giải pháp thay thế thương mại nào, nhưng đó là một cách tiếp cận khá đơn giản, cho phép bạn điều tra các phần thú vị mà không có tiếng ồn xung quanh.

0

dự án: https://github.com/lukehutch/fast-classpath-scanner

cách sử dụng mới nhất lời khuyên/news: https://github.com/lukehutch/fast-classpath-scanner/releases

lọ tiền biên dịch + nguồn: https://oss.sonatype.org/#nexus-search;quick~fast-classpath-scanner

dụ: https://github.com/lukehutch/fast-classpath-scanner/wiki/3.9.-Generating-a-GraphViz-dot-file-from-the-classgraph

ScanResult scanResult = new FastClasspathScanner(
    MyClass.class.getPackage().getName()).scan(); 
String str = scanResult.generateClassGraphDotFile(9.2f, 8.0f); 

Files.write(str, new File("GraphViz.dot"), StandardCharsets.UTF_8); 

System.out.println("now run this at terminal: dot -Tsvg <GraphViz.dot> GraphViz.svg"); 
Các vấn đề liên quan