- vừa được xem lúc

[Design Patterns] Front Controller

0 0 20

Người đăng: Semi Art

Theo Viblo Asia

Front Controller được sử dụng để cung cấp một trung tâm xử lý yêu cầu, nơi mà tất cả các yêu cầu sẽ được tiếp nhận và phản hồi bởi 1 object duy nhất. Object này có thể thực hiện xác thực đăng nhập/ghi nhật ký/theo dõi yêu cầu và chuyển yêu cầu tới các object xử ký khác ở cấp thấp hơn. Sau đây là các thành phần của pattern:

  • Front Controller - Object tiếp nhận tất cả các yêu cầu được gửi tới ứng dụng (web hoặc desktop).
  • Dispatcher - Object này sẽ hỗ trợ Front Controller chuyển yêu cầu tới các object xử lý ở cấp thấp hơn.
  • View - Object mô tả giao diện người dùng, nơi mà yêu cầu được tạo ra và gửi tới Front Controller.

Áp dụng triển khai

Chúng ta sẽ tạo ra một FrontController để nhận tất cả các yêu cầu request từ các View, sau đó nhờ Dispatcher chuyển tới các Controller tương ứng với các yêu cầu cần xử lý.

Bước 1

Tạo FrontControllerDispatcher.

frontcontroller/FrontController.java

package frontcontroller; public class FrontController { private static final FrontController instance = new FrontController(); private final Dispatcher dispatcher = new Dispatcher(); public static FrontController getInstance() { return instance; }; private boolean isAuthenticUser() { System.out.println("User is authenticated successfully."); return true; } public void trackRequest(String request) { System.out.println("Page requested: " + request); } public void dispatchRequest(String request) { trackRequest(request); if (! isAuthenticUser()) { /* do nothing */ } else dispatcher.dispatch(request); }
}

frontcontroller/Dispatcher.java

package frontcontroller; import frontcontroller.controller.*; public class Dispatcher { private Controller homeController = new HomeController(), studentController = new StudentController(), notfoundController = new NotfoundController(), logoutController = new LogoutController(); public void dispatch(String request) { if ("home".equalsIgnoreCase(request)) homeController.process(request); else if ("student".equalsIgnoreCase(request)) studentController.process(request); else if ("logout".equalsIgnoreCase(request)) logoutController.process(request); else notfoundController.process(request); }
}

Bước 2

Tạo interface Controller.

frontcontroller/controller/Controller.java

package frontcontroller.controller; public interface Controller { void process(String request);
}

Và các class triển khai xử lý các yêu cầu cụ thể.

frontcontroller/controller/HomeController.java

package frontcontroller.controller; import frontcontroller.view.HomeView; public class HomeController
implements Controller { private HomeView view = new HomeView(); @Override public void process(String request) { view.show(); }
}

frontcontroller/controller/StudentController.java

package frontcontroller.controller; import frontcontroller.view.StudentView; public class StudentController
implements Controller { private StudentView view = new StudentView(); @Override public void process(String request) { view.show(); }
}

frontcontroller/controller/NotfoundController.java

package frontcontroller.controller; import frontcontroller.view.NotfoundView;
import frontcontroller.view.View; public class NotfoundController
implements Controller { private View notfoundView = new NotfoundView(); @Override public void process(String request) { notfoundView.show(); }
}

frontcontroller/controller/LogoutController.java

package frontcontroller.controller; import frontcontroller.view.LogoutView; public class LogoutController
implements Controller { private LogoutView exitView = new LogoutView(); @Override public void process(String request) { exitView.show(); }
}

Bước 3

Tạo interface View.

frontcontroller/view/View.java

package frontcontroller.view; public interface View { void show();
}

Và các class triển khai.

frontcontroller/view/HomeView.java

package frontcontroller.view; import frontcontroller.FrontController; import java.util.Scanner; public class HomeView
implements View { @Override public void show() { System.out.println("=== Trang chủ"); System.out.print( "Bạn đang ở trang chủ.\n" + "Hãy nhập trang mà bạn muốn di chuyển tới ( home | student | logout ): " ); Scanner scanner = new Scanner(System.in); String request = scanner.nextLine(); FrontController.getInstance().dispatchRequest(request); }
}

frontcontroller/view/StudentView.java

package frontcontroller.view; import frontcontroller.FrontController; import java.util.Scanner; public class StudentView
implements View { private FrontController controller = FrontController.getInstance(); @Override public void show() { System.out.println("=== Thông tin sinh viên"); System.out.print( "Bạn đang ở trang hiển thị thông tin sinh viên.\n" + "Hãy nhập trang mà bạn muốn di chuyển tới ( home | student | logout ): " ); Scanner scanner = new Scanner(System.in); String request = scanner.nextLine(); FrontController.getInstance().dispatchRequest(request); }
}

frontcontroller/view/NotfoundView.java

package frontcontroller.view; import frontcontroller.FrontController; public class NotfoundView
implements View { @Override public void show() { System.out.println("=== Trang hiển thị tạm"); System.out.println( "Trang hiển thị mà bạn yêu cầu không tồn tại.\n" + "Đang điều hướng trở lại trang chủ." ); FrontController.getInstance().dispatchRequest("home"); }
}

frontcontroller/view/LogoutView.java

package frontcontroller.view; public class LogoutView
implements View { @Override public void show() { System.out.println("=== Đăng xuất"); System.out.println("Tài khoản của bạn đã được đăng xuất."); System.exit(0); }
}

Bước 4

Chạy thử chương trình.

PatternDemo.java

import frontcontroller.FrontController; public class PatternDemo { public static void main(String[] args) { FrontController.getInstance().dispatchRequest("home"); }
}

Bước 5

Tương tác ở console và kiểm chứng kết quả hoạt động của pattern.

console

Page requested: home
User is authenticated successfully.
=== Trang chủ
Bạn đang ở trang chủ.
Hãy nhập trang mà bạn muốn di chuyển tới ( home | student | logout ): student
Page requested: student
User is authenticated successfully.
=== Thông tin sinh viên
Bạn đang ở trang hiển thị thông tin sinh viên.
Hãy nhập trang mà bạn muốn di chuyển tới ( home | student | logout ): about
Page requested: about
User is authenticated successfully.
=== Trang hiển thị tạm
Trang hiển thị mà bạn yêu cầu không tồn tại.
Đang điều hướng trở lại trang chủ.
Page requested: home
User is authenticated successfully.
=== Trang chủ
Bạn đang ở trang chủ.
Hãy nhập trang mà bạn muốn di chuyển tới ( home | student | logout ): logout
Page requested: logout
User is authenticated successfully.
=== Đăng xuất
Tài khoản của bạn đã được đăng xuất.

Bình luận

Bài viết tương tự

- vừa được xem lúc

Closure trong Javascript - Phần 2: Định nghĩa và cách dùng

Các bạn có thể đọc qua phần 1 ở đây. Để mọi người không quên, mình xin tóm tắt gọn lại khái niệm lexical environment:.

0 0 51

- vừa được xem lúc

Var vs let vs const? Các cách khai báo biến và hằng trong Javascript

Dạo này mình tập tành học Javascript, thấy có 2 cách khai báo biến khác nhau nên đã tìm tòi sự khác biệt. Nay xin đăng lên đây để mọi người đọc xong hy vọng phân biệt được giữa let và var, và sau đó là khai báo hằng bằng const.

0 0 31

- vừa được xem lúc

VueJS: Tính năng Mixins

Chào mọi người, hôm nay mình sẽ viết về Mixins và 1 số vấn đề trong sử dụng Mixins hay ho mà mình gặp trong dự án thực. Trích dẫn từ trang chủ của VueJS:.

0 0 27

- vừa được xem lúc

Asset Pipeline là cái chi chi?

Asset Pipeline. Asset pipeline là cái chi chi. . Giải thích:.

0 0 47

- vừa được xem lúc

Tạo data table web app lấy dữ liệu từ Google Sheets sử dụng Apps Script

Google Sheets là công cụ tuyệt vời để lưu trữ bảng tính trực tuyến, bạn có thể truy cập bảng tính bất kỳ lúc nào ở bất kỳ đâu và luôn sẵn sàng để chia sẻ với người khác. Bài này gồm 2 phần.

0 0 266

- vừa được xem lúc

Học Deep Learning trên Coursera miễn phí

Bạn muốn bắt đầu với Deep Learning nhưng không biết bắt đầu từ đâu? Bạn muốn có một công việc ở mức fresher về Deep Learning? Bạn muốn khoe bạn bè về kiến thức Deep Learning của mình. Bắt đầu từ đâu.

0 0 35