2010-08-17 33 views
8

Tôi đang làm việc để tạo một ứng dụng sẽ phân tích các bài viết MSDN cho siêu thông tin như tiêu đề bài viết và các bài viết khác có cùng bộ sưu tập. Ứng dụng này cũng có giao diện người dùng GUI.Tôi có nên tạo DLL cho mô đun không?

Tôi quan tâm đến việc làm cho chương trình này thêm mô đun bằng cách tách giao diện người dùng khỏi phần sau và phần sau thành hai phần - một phần xử lý việc truy xuất và phân tích cú pháp chung của tài liệu HTML và một phân tích cú pháp cụ thể hơn liên quan đến MSDN. Ý tưởng cho rằng điều này sẽ cho phép giao diện người dùng tùy chỉnh được tát vào mặt sau và cho phép ứng dụng có thể phân tích các trang web khác (có lẽ kết quả tìm kiếm của Google) chỉ bằng cách cắm một tệp DLL khác.

Hiểu biết của tôi là bạn thường tạo các tệp DLL để chia sẻ mã trên các ứng dụng khác nhau. Tuy nhiên, trong trường hợp này, tôi chỉ tìm kiếm mô đun cho một ứng dụng cụ thể này. Nó vẫn còn thích hợp để tạo DLL trong trường hợp này? Hoặc tôi có nên xem xét một lựa chọn khác, chẳng hạn như chỉ lấp lánh tất cả các lớp với nhau thành một hội đồng duy nhất?

Tôi nên lưu ý rằng tôi khá mới lập trình, vì vậy ngay cả khi câu trả lời là "không", thì đây vẫn sẽ là một bài tập tốt để tôi học hỏi. Nếu đó là trường hợp, tôi muốn biết nếu tập thể dục này nên được sửa đổi trong anyway để làm cho nó thích hợp hơn.

Trả lời

7

Tôi nghĩ rằng ý tưởng của bạn về việc sử dụng các tệp DLL trong trường hợp này là một ý tưởng hay. Không có thêm chi phí đáng kể trong việc sử dụng DLL (có thể chi phí khởi động nhiều hơn một chút nhiều nhất). Và ngay cả khi bạn hiện chỉ có kế hoạch sử dụng chúng trong một ứng dụng này, nó không đau để vẫn có kế hoạch cho những thay đổi trong tương lai. Luôn luôn có một cơ hội tốt mà các DLL có thể được sử dụng với ít hoặc không có sửa đổi trong một ứng dụng khác nếu cần thiết.

Ngoài ra, tách nó thành các DLL riêng biệt cho mô đun có thể thậm chí còn giúp với quá trình thiết kế và phát triển. Nó làm cho "chia sẻ" dữ liệu toàn cầu khó khăn hơn (và đó có lẽ là một điều tốt). Nếu tất cả mọi thứ trong một hội đồng nguyên khối, có thể có một số xu hướng chỉ lấy một số dữ liệu từ một số nơi khác. Nếu dữ liệu đó sống trong một hội đồng khác, thì việc thực hành có khả năng tồi tệ đó ít có khả năng xảy ra hơn. Nó có thể buộc các nhà phát triển phải suy nghĩ lại cách giải quyết vấn đề.

+1

+1 cho đoạn thứ hai. Modularity thực sự buộc bạn phải sử dụng một thiết kế sạch sẽ hơn và cũng nghĩ ra cho ứng dụng của bạn. –

+1

+1 cho đoạn 2. Bất cứ điều gì bạn có thể làm điều đó buộc bạn phải giải quyết vấn đề đúng hơn là chỉ mò mẫm một số mô-đun không liên quan là tốt. – Daniel

1

Các tệp DLL có thể giúp bảo trì ứng dụng của bạn. Nếu bạn có bản cập nhật trong tương lai và/hoặc sửa lỗi, bạn có thể cập nhật các tệp DLL cụ thể thay vì toàn bộ ứng dụng. Điều này cũng sẽ giúp giảm diện tích bề mặt thử nghiệm của bạn.

Trong quá trình phát triển, nó cũng sẽ dễ dàng hơn trong việc loại bỏ các lớp/DLL nhất định và trao đổi trong các tệp DLL thực tế sau này khi được phát triển.

Tôi sẽ không phát điên và đưa mọi lớp vào DLL riêng của mình. Từ cấp độ cao, cần có một nhóm các lớp học rõ ràng nên ở bên nhau.

1

Có nhiều lợi thế để thực hiện một DLL:

  • DLL có thể được thay đổi một cách độc lập từ chương trình gọi (front-end)
  • DLL có thể được phân phối bởi chính nó, một cách độc lập từ các vấn đề gọi (front-end)
  • nếu một số phần mềm cùng một lúc chạy sử dụng DLL cùng bộ nhớ sẽ nhỏ hơn

Nó cũng đi kèm với một chi phí:

  • bạn không thể sử dụng sơ đồ thừa kế đơn giản để mở rộng các lớp học DLL
  • chia sẻ dữ liệu toàn cầu vẫn còn có thể nhưng khó khăn hơn (một số có thể nói thiết kế lực lượng này tốt hơn, nhưng nó vẫn còn một hạn chế) kiểm tra
  • đơn vị mã bao gồm trong một DLL là khó khăn hơn
  • có những vấn đề cài đặt (dll phải được đặt ở những nơi đặc biệt và đăng ký, tuỳ theo cách bạn sử dụng nó)

Nhưng điểm chính liên quan đến mô đun là DLL là vẫn còn một nửa. Ngay cả khi chúng ta bỏ qua chi phí, nó không tốt hơn nhiều so với một lib hoặc thậm chí chỉ sử dụng lại các lớp hiện có. Ưu điểm chính là dành cho người bán lại, không thực sự dành cho nhà phát triển phần mềm, trừ khi bạn mong đợi người đóng góp của bên thứ ba. Và các hàm được gọi vẫn đang chạy trong cùng một tiến trình mà chương trình chính.

Nếu bạn muốn cắt thực tế cho mô đun, bạn có thể sử dụng kiến ​​trúc đa tầng thực với các quy trình riêng biệt cho front-end và back-end và một lớp giao tiếp giữa chúng (nói socket TCP). Đó thường là cả hai linh hoạt hơn và mạnh mẽ hơn, và không phức tạp hơn nhiều khi thực hiện đủ sớm trong cuộc sống dự án.

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