Áp dụng mẫu thiết kế DynamicFactory để điều hướng xử lý các yêu

Một phần của tài liệu nghiên cứu mẫu thiết kế hướng đối tượng áp dụng xây dựng ứng dụng hỗ trợ rút trích thông tin từ web (Trang 49 - 56)

Sơ đồ lớp khi áp dụng như sau:

Hình 5-6: Sơ đồ lớp thành phần điều hướng xử lý yêu cầu

Hình 5-6 mô tả sơ đồ lớp thành phần điều hướng xử lý yêu cầu. Sau đây là mô tả chi tiết các lớp trong thành phần này:

• XMLParser: đọc thông tin cấu hình từ tệp tin XML thông quan phương thức

public Information LoadAction(String name. Thông tin cấu hình ở tệp tin XML minh họa như sau:

• Lớp Information lưu trữ thông tin về lớp xử lý các yêu cầu

<config>

<action name="welcome" class="FormSearch"/> <action name="search" class="Search"/>

Controller: Điều hướng đến lớp xử lý được lưu trữ trong lớp Information

GUI,FormsearchGUI, SearchGUI là các lớp xử lý tương ứng với các yêu cầu từ giao diện

Khi đó client chỉ cần gọi:

Controller controller = new Controller();

String servletAction = request.getServletPath();

5.3.2 Áp dụng mẫu Abstract Factory cho thành phần rút trích thông tin từ web jn nội dung động

Trong phần này, chúng tôi minh họa và phân tích mã nguồn của ứng dụng trong hai trường hợp (sử dụng mẫu thiết kế và không sử dụng mẫu thiết kế) để từ đó rút ra những nhận xét, so sánh một cách cụ thể.

5.3.2.1 Cách cài đặt thứ 1

Chúng tôi đưa ra trường hợp lập trình đơn giản và dễ hiểu nhất đứng trên quan điểm của lập trình viên như sau:

B1: Thiết kế cơ sở dữ liệu Chúng tôi tiến hành sử dụng cơ sở dữ liệu như đã trình bày.

B2: Thiết kế sơ đồ lớp

Hình 5-7: Cài đặt không dùng mẫu Abstract Factory Mô tả:

• Phương thức showGUI(String name): tùy thuộc vào tên của chủ đề mà truy vấn đến cơ sở dữ liệu để lấy các thuộc tính của chủ đề đó và phát sinh giao diện với các thuộc tính tương ứng.

• Phương thức queryDispatcher(String name, Information userInformation): tùy thuộc vào tên của chủ đề mà truy vấn đến cơ sở dữ liệu để lấy các trang web của chủ đề đó và dựa vào các thông tin mà người dùng đã chọn từ giao diện (kết quả trả về từ phương thức showGUI) tiến hành map giữa thuộc tính chủ đề và thuộc tính từng trang web, xây dựng các câu truy vấn gửi đến từng web thuộc chủ đề đó.

• Phương thức extractInformation(String file): rút trích các trang web mà queryDispatcher trả về.

5.3.2.2 Cách cài đặt thứ 2

Chúng tôi áp dụng mẫu Abstract Factory để xây dựng thành phần như sơ đồ sau:

Hình 5-8: Mẫu Abstract Factory cho thành phần rút trích thông tin từ web jn

Khi người dùng có nhu cầu rút trích thông tin một chủ đề nào đó, chỉ cần thay đổi điều kiện tạo lập factory, sẽ có một factory tương ứng với chủ đề đó. Lúc này sẽ phát sinh một nhóm các “sản phNm” tương ứng với chủ đề đó.

N ếu như số lượng trang web và số lượng chủ đề ít, ta có thể áp dụng trực tiếp mẫu này mà không cần sử dụng cơ sở dữ liệu. Tuy nhiên khi số lượng trang web nhiều làm cho công việc map các thuộc tính chung và các tên biến, map các giá trị thuộc tính và giá trị biến sẽ trở nên khó khăn. Khi bổ sung hay thay đổi chủ đề, trang web nhà phát triển phải bổ sung thêm lớp ứng với chủ đề đó, các phương thức ứng với từng trang web…

Do đặc điểm của bài toán là các phương thức của các họ “sản phNm” là các trang web có cài đặt các phương thức là tương tự nhau và mong muốn bổ sung các chủ đề một cách tự động mà không cần bổ sung lớp hay thay đổi code. Chúng tôi tiến hành lưu trữ các thông tin về chủ đề trong cơ sở dữ liệu và tổng quát hóa các phương thức bằng cách gom nhóm các factory và gom nhóm họ “sản phNm” thành một factory và một “sản phNm” tổng quát.

B1: Thiết kế cơ sở dữ liệu

Khi chuyển việc lưu trữ thông tin từ các lớp sang cơ sở dữ liệu quan hệ, ta có nhiều phương pháp chuyển đổi như: gộp tất cả các lớp trong cây kế thừa thành một, đNy các thuộc tính của lớp cơ sở xuống lớp kế thừa, mỗi bảng cho một lớp. Mỗi phương pháp đều có những ưu điểm và nhược điểm riêng. Ở đây, chúng tôi chọn phương pháp gộp tất cả các lớp trong cây kế thừa thành một.

• Tất cả các chủ đề, chúng tôi lưu trữ trong bảng chính là Subject, các thông tin chủ đề chúng tôi lưu trữ trong SubjectAttribute tương ứng với chủ đề đó. • Tất cả các trang web dùng để gửi, nhận truy vấn và tiến hành rút trích thông

tin, chúng tôi lưu trữ trong bảng Web. Các thông tin về form của trang web chúng tôi lưu trữ trong bảng WebVariable.

N hận xét: đây chính là cơ sở dữ liệu quan hệ mà chúng tôi đã trình bày trong cách lập trình thông thường.

B2: Xây dựng sơ đồ lớp khi cài đặt

Vì chúng tôi sử dụng cơ sở dữ liệu để lưu trữ các thông tin nên mẫu Abstract Factory khi cài đặt đã có sự thay đổi. Sơ đồ lớp lúc này như sau:

Các thành phần:

• Lớp Factory để tạo ra một tập các đối tượng tương ứng với chủ đề name • Interface GUI quản lý việc phát sinh giao diện dựa trên thuộc tính của chủ đề

name.

• Interface QueryDispatcher: quản lý việc truy vấn các trang web của chủ đề nam.

• Interface ExtractInformation: quản lý việc rút trích thông tin các trang web của chủ đề name.

Cài đặt:

AbstractFactory metaSearch = new SubjectFactory(); metaSearch.makeObject(info);

UsageProcess usageProcess = new UsageProcess(metaSearch); usageProcess.processQuery();

Tạo một factory cho 1 chủ đề cụ thể bằng makeObject(G)

Khi đó trong SubjectFactory sẽ cài đặt như sau:

Tạo ra GUI ứng với factory của chủ đề đó

Tạo QueryDispatcher ứng với factory chủ đề

Tạo InformationExtractor ứng với factory chủ đề

Trong Factory tương ứng với chủ đề cụ thể có thể tạo được 3 “sản phNm” cùng thuộc chủ đề đó bằng cách phương thức khởi tạo phù hợp do factory đó định nghĩa.

5.3.2.3 Kết luận

Khi áp dụng mẫu thiết kế Abstract factory để cài đặt chúng tôi nhận thấy có những ưu điểm sau:

• Việc phát sinh ra lớp sản xuất tùy thuộc vào Client chọn chủ đề nào. Khi đó, lớp sản xuất được phát sinh sẽ tạo lập một nhóm 3 đối tượng sản phNm tương ứng với chủ đề và người dùng không cần quan tâm về đối tượng đó được tạo lập như thế nào. Quá trình tạo lập các đối tượng sản phNm được che dấu hoàn toàn. Điều này hoàn toàn đúng với mô hình Abstract Factory định nghĩa ban đầu.

• Có thể dễ dàng chuyển đổi các đối tượng sản phNm: nhờ tính độc lập trên, khi cần thay đổi đối tượng sản phNm, Client chỉ việc thay đổi điều kiện tạo lập đối tượng sản xuất.

• Đây có thể xem như là một thư viện hỗ trợ cho các nhà phát triển tái sử dụng lại. N hà phát triển có thể cài đặt mới 1 lớp factory kế thừa từ Abstract Factory cho 1 chủ đề khác, bổ sung hay thay đổi các họ sản phNm cho phù hợp mà không ảnh hưởng đến hệ thống ban đầu.

Một phần của tài liệu nghiên cứu mẫu thiết kế hướng đối tượng áp dụng xây dựng ứng dụng hỗ trợ rút trích thông tin từ web (Trang 49 - 56)