2008-11-20 28 views
7

Chúng tôi đang xây dựng các công cụ để khai thác thông tin từ web. Chúng tôi có một vài miếng, chẳng hạn nhưCác phương pháp hay nhất về quản lý các thành phần phức tạp/trực quan hóa trong phần mềm của bạn?

  • dữ liệu thu thập thông tin từ trang web
  • thông tin
  • Extract dựa trên các mẫu & quy tắc kinh doanh
  • Parse kết quả vào cơ sở dữ liệu
  • Áp dụng bình thường & quy tắc lọc
  • Etc, vv .

Sự cố là sự cố khắc phục sự cố & có một "bức tranh cấp cao" tốt về những gì đang xảy ra ở từng giai đoạn.

Kỹ thuật nào đã giúp bạn hiểu và quản lý các quy trình phức tạp?

  • Sử dụng công cụ workflow như nền tảng Windows Workflow
  • đóng gói các chức năng riêng biệt vào các công cụ dòng lệnh & công cụ sử dụng kịch bản để liên kết chúng lại với nhau
  • Viết Ngôn ngữ Domain-cụ thể (DSL) để xác định điều gì trật tự nên xảy ra ở cấp độ cao hơn.

Chỉ cần tò mò về cách bạn có thể xử lý trên hệ thống có nhiều thành phần tương tác. Chúng tôi muốn tài liệu/hiểu cách thức hoạt động của hệ thống ở cấp cao hơn so với truy tìm thông qua mã nguồn.

+0

Nếu bạn thích những câu trả lời cho bạn, nó sẽ không đau nếu bạn bỏ phiếu cho họ. ;) – Till

+0

Thực hiện và thực hiện :) – Kalid

Trả lời

2

Mã cho biết điều gì xảy ra ở từng giai đoạn. Sử dụng một DSL sẽ là một lợi ích, nhưng có thể không nếu nó đi kèm với chi phí bằng văn bản của ngôn ngữ kịch bản của riêng bạn và/hoặc trình biên dịch.

Tài liệu cấp cao hơn không được bao gồm chi tiết về những gì xảy ra ở mỗi bước; nó sẽ cung cấp tổng quan về các bước và cách chúng liên quan với nhau.

lời khuyên tốt:

  • Tưởng tượng quan hệ trong CSDL của bạn.
  • Sử dụng visio hoặc các công cụ khác (như cái bạn đã đề cập - chưa sử dụng nó) cho quá trình xem trước quá trình (ví dụ: nó thuộc về đặc điểm kỹ thuật của dự án của bạn).
  • Đảm bảo mã của bạn được cấu trúc/ngăn cách đúng cách/v.v.
  • Đảm bảo bạn có một số loại đặc tả dự án (hoặc một số tài liệu "chung" khác giải thích những gì hệ thống thực hiện ở mức trừu tượng).

Tôi sẽ không khuyên bạn nên tạo các công cụ dòng lệnh trừ khi bạn thực sự có sử dụng cho chúng. Không cần phải duy trì công cụ bạn không sử dụng. (Điều đó không giống như nói rằng nó không thể hữu ích, nhưng hầu hết những gì bạn làm âm thanh giống như nó thuộc về một thư viện hơn là thực hiện các quy trình bên ngoài).

+0

Cảm ơn những lời khuyên - Tôi thích visio/specs, nhưng chắc chắn họ dường như đã lạc hậu. Lý tưởng nhất là trực quan hóa có thể đến từ chính mã (giống như các quan hệ lược đồ db). Đồng ý - các công cụ dòng lệnh vì mục đích riêng của chúng không hữu ích, nhưng đôi khi các tập lệnh dễ quét hơn mã. – Kalid

3

Tôi sử dụng AT & T nổi tiếng Graphviz, đơn giản và hoạt động tốt. Cùng một thư viện Doxygen cũng sử dụng nó.

Ngoài ra nếu bạn thực hiện một chút nỗ lực, bạn có thể nhận được đồ thị rất đẹp. Quên đề cập đến, cách tôi sử dụng nó như sau (vì Graphviz phân tích các kịch bản Graphviz), tôi sử dụng một hệ thống thay thế để ghi lại các sự kiện ở định dạng Graphviz, vì vậy tôi chỉ phân tích cú pháp tệp nhật ký và nhận đồ thị đẹp.

+0

Thông tin đăng nhập vào định dạng Graphviz là một ý tưởng thực sự tuyệt vời - cảm ơn! – Kalid

1

Công ty của tôi viết functional specifications cho mỗi thành phần chính. Mỗi thông số kỹ thuật tuân theo một định dạng phổ biến và sử dụng các biểu đồ và hình ảnh khác nhau khi thích hợp. Thông số kỹ thuật của chúng tôi có một phần chức năng và một phần kỹ thuật. Phần chức năng mô tả thành phần làm gì ở cấp độ cao (tại sao, mục tiêu nó giải quyết, những gì nó không làm, những gì nó tương tác với, các tài liệu bên ngoài có liên quan, vv). Phần kỹ thuật mô tả các lớp quan trọng nhất trong thành phần và bất kỳ mẫu thiết kế cao cấp nào.

Chúng tôi thích văn bản vì linh hoạt và dễ cập nhật nhất. Đây là một vấn đề lớn - không phải ai cũng là một chuyên gia (hoặc thậm chí là phong nha) tại Visio hoặc Dia, và đó có thể là một trở ngại để giữ cho các tài liệu được cập nhật. Chúng tôi viết các thông số kỹ thuật trên một wiki để chúng tôi có thể dễ dàng liên kết giữa mỗi đặc điểm kỹ thuật (cũng như thay đổi theo dõi) và cho phép đi bộ không tuyến tính mặc dù hệ thống.

Đối với một đối số từ thẩm quyền, Joel đề xuất Thông số chức năng herehere.

1

Tôi tìm thấy một dependency structure matrix một cách hữu ích để phân tích cấu trúc của ứng dụng. Một công cụ như lattix có thể hữu ích.

Tùy thuộc vào nền tảng và chuỗi công cụ của bạn có nhiều gói phân tích tĩnh thực sự hữu ích có thể giúp bạn ghi lại mối quan hệ giữa các hệ thống phụ hoặc thành phần của ứng dụng. Đối với nền tảng .NET, NDepend là một ví dụ điển hình. Có rất nhiều nền tảng khác cho các nền tảng khác. Có một thiết kế hay mô hình tốt trước khi xây dựng hệ thống là cách tốt nhất để hiểu rõ về cách ứng dụng được cấu trúc nhưng các công cụ như tôi đã đề cập có thể giúp thực thi các quy tắc kiến ​​trúc và thường xuyên cung cấp cho bạn thông tin chi tiết thiết kế mà chỉ cần trawling thông qua mã không thể.

0

Thiết kế từ trên xuống giúp ích rất nhiều. Một sai lầm tôi thấy là làm cho thiết kế trên xuống thiêng liêng. Thiết kế cấp cao nhất của bạn cần được xem xét và cập nhật giống như bất kỳ phần mã nào khác.

1

Tôi sẽ không sử dụng bất kỳ công cụ nào bạn đã đề cập.

Bạn cần vẽ sơ đồ mức cao (tôi thích bút chì và giấy).

Tôi sẽ thiết kế một hệ thống có các mô-đun khác nhau làm những việc khác nhau, sẽ rất đáng giá khi thiết kế để bạn có thể có nhiều phiên bản của từng mô-đun chạy song song.

Tôi sẽ nghĩ về việc sử dụng nhiều hàng đợi cho

  • URL cần Thu thập
  • trang crawl từ web
  • thông tin Trích dựa trên các mẫu & quy tắc kinh doanh
  • quả
  • phân tích cú pháp
  • normalizationed & kết quả được lọc

Bạn sẽ có chương trình đơn giản (có thể dòng lệnh không có giao diện người dùng) có thể đọc dữ liệu từ hàng đợi và chèn dữ liệu vào một hoặc nhiều hàng đợi (Trình thu thập thông tin sẽ cung cấp cả hai URL "Thu thập thông tin"" trang từ trang web"), Bạn có thể sử dụng:

  • Một web crawler
  • Một dữ liệu vắt
  • Một phân tích cú pháp
  • Một normalizer và filterer

Chúng phù hợp giữa các hàng đợi và bạn có thể chạy nhiều bản sao này trên các máy tính riêng biệt, cho phép điều này mở rộng.

Hàng đợi cuối cùng có thể được cấp cho một chương trình khác thực sự đăng mọi thứ vào cơ sở dữ liệu để sử dụng thực tế.

+0

Cảm ơn, tôi thích ý tưởng khái niệm về việc có hàng đợi riêng biệt. – Kalid

0

Điều quan trọng là phải phân vùng các thành phần này trong suốt vòng đời phát triển phần mềm của bạn - thời gian thiết kế, thời gian phát triển, thử nghiệm, phát hành và thời gian chạy. Chỉ cần vẽ một sơ đồ là không đủ.

Tôi nhận thấy rằng việc áp dụng kiến ​​trúc vi hạt nhân thực sự có thể giúp "phân chia và conqure" sự phức tạp này. Bản chất của kiến ​​trúc microkernel là:

  • Processes (mỗi thành phần chạy trong một không gian bộ nhớ riêng biệt)
  • Chủ đề (mỗi thành phần chạy trên một sợi riêng biệt)
  • Truyền thông (các thành phần giao tiếp thông qua một duy nhất, đơn giản nhắn qua kênh)

tôi đã viết một hệ thống xử lý hàng loạt khá phức tạp mà âm thanh tương tự như hệ thống của bạn sử dụng:

EAC bản đồ h thành phần để thực thi .NET kiếp sống thực thi được quản lý thông qua Autosys (tất cả trên cùng một máy) Truyền thông diễn ra thông qua TIBCO Rendezvous

Nếu bạn có thể sử dụng một bộ công cụ cung cấp một số mẫn chạy, thậm chí tốt hơn. Ví dụ, Autosys cho phép tôi xem những gì các tiến trình đang chạy, những lỗi nào đã xảy ra trong khi TIBCO cho phép tôi kiểm tra các hàng đợi thông báo trong thời gian chạy.

0

Tôi thích sử dụng NDepend để căn chỉnh kỹ thuật phức tạp. Mã cơ sở .NET.Công cụ này đi kèm với một số tính năng trực quan tuyệt vời như:

phụ thuộc Graph: alt text

phụ thuộc Matrix: alt text

Mã trực quan số liệu thông qua treemaping: alt text

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