Sinh viên thực hiê ̣n : Đào Phan Quang K50 Lớp CNPM 52
Hình 10. Uses Case chƣ́c năng ho ̣c tƣ̀
III. Kiến trú c của hê ̣ thống :
Mô ̣t ƣ́ng du ̣ng web cu ̣ thể luôn bao gồm hai phần frontend và backend . Khi phát triển ƣ́ng du ̣ng web ta phải cân nhắc cho ̣n sƣ̉ du ̣ng công nghê ̣ nào cho mỗi phần . Ở đây mă ̣c đi ̣nh ta sẽ dùng GEA cho phần backend. Vấn đề còn la ̣i là lƣ̣a cho ̣n công nghê ̣ frontend cho hê ̣ thống.
Sinh viên thực hiê ̣n : Đào Phan Quang K50 Lớp CNPM 53
Hình 11. Mô hình ƣ́ng du ̣ng GEA [3]
Viê ̣c xác định sẽ sử dụng công nghệ nào cho phần Frontend của hệ thống phụ thuô ̣c vào mƣ́c đô ̣ tƣơng thích của nó khi phần b ackend ta đã xác đi ̣nh sƣ̉ du ̣ng GEA. Hiện ta ̣i GEA hỗ trơ ̣ 2 ngôn ngƣ̃ là Java và Python cùng nhƣ̃ng ngôn ngƣ̃ có khả năng chạy trên máy ảo Java . Do đó ta có các lƣ̣a cho ̣n nhƣ JSP ,JSF,… Sau thời gian tìm hiểu, em quyết đi ̣nh sƣ̉ du ̣ng mô ̣t công nghê ̣ frontend của chính Google là Google Web Toolkit (GWT) vì những lợi điểm sau :
- GWT do chính Google phát triển nên khả năng kết hợp với GEA cao và đƣợc hỗ trơ ̣ trƣ̣c tiếp của Google.
- GWT là nền tảng để xây dƣ̣ng website hoàn toàn AJAX , mô ̣t yêu cầu ngày càng trở nên bắt buộc đối với ứng dụng nền web.
- GWT tuy là công nghê ̣ phát triển web Frontend nhƣng khi lâ ̣p trình ta không phải đụng đến ngôn ngƣ̃ nào khác ngoài Java . Viê ̣c ta ̣o giao diê ̣n cũng nhƣ lâ ̣p trình AJAX hoàn toàn bằng Java , lâ ̣p trình viên không cần phải biết html , xml, javascript …
- GWT vẫn hô ̣ trợ các thƣ viê ̣n javascript thông qua JSNI.
III.2. GWT RPC :
Tất cả nhƣ̃ ng ƣ́ng du ̣ng GWT thƣ̣c chất là nhƣ̃ng mã javascript cha ̣y trên trình duyê ̣t đƣợc di ̣ch ra tƣ̀ java . Thông thƣờng ta còn muốn ƣ́ng du ̣ng lấy thêm thông tin tƣ̀ cơ sở dƣ̃ liê ̣u để ta ̣o ra nô ̣i dung . Đối với những ứng dụng có backend sử dụng nền tảng java (ở đây là GEA ) cách tốt nhất là sử dụng RPC (remote procedure call) để lấy dữ liệu một cách không đồng bộ. GWT cung cấp mô ̣t cơ chế nhƣ vâ ̣y.
Ba thành phần chính của cơ chế RPC mà ta phải chú ý khi cài đă ̣t :
- Dịch vụ ta gọi (phần cha ̣y trên server ), gồm mã thƣ̣c thi công viê ̣c mà ta cần làm.
Sinh viên thực hiê ̣n : Đào Phan Quang K50 Lớp CNPM 54
- Mã ở phía client để gọi dịch vụ.
- Các đối tƣợng java để truyền tải giữa client và server .
Hình 12. Mô hình RPC trong GWT [7]
Để đi ̣nh nghĩa giao tiếp RPC trong GWT ta phải thƣ̣c hiê ̣n các công viê ̣c sau : - Đi ̣nh nghĩa mô ̣t interface kế thƣ̀a RemoteService và liê ̣t kê các hàm di ̣ch vu ̣
muốn go ̣i.
- Tạo lớp cài đặt của interface trên kế thừa RemoteServiceSe rvlet và viết mã cho các hàm di ̣ch vu ̣ đó.
- Đi ̣nh nghĩa mô ̣t interface không đồng bô ̣ để go ̣i các di ̣ch vu ̣ tƣ̀ phía client.
III.3. Kiến trú c MVP :
Khi phát triển mô ̣t hê ̣ thống , để đảm bảo hai yêu cầu chính là khả năng cho phép nhiều lâ ̣p trình viên cùng phát triển và khả năng thêm tính năng cho hê ̣ thống sau mỗi giai đoa ̣n phát triển ta cần phải lƣ̣a cho ̣n mô ̣t kiến trúc cho hê ̣ thống . Có nhiều kiểu kiến trúc cho ta lƣ̣a cho ̣n : Presenter-abtraction-control, Model-view-controller, Model-view-presenter v.v.. và trong khi mỗi kiến trúc có điển lợi riêng , ta thấy rằng kiến trúc MVP là tốt nhất khi phát triển ƣ́ng du ̣ng GWT vì hai lý do chính sau ;
- Mô hình MVP cho phép nhiều nhà phát triển đ ồng thời phát triển , hơn thế nƣ̃a nó còn cho phép nhƣ̃ng nhà phát triển viết mã đô ̣c lâ ̣p với ngƣời thiết kế giao diê ̣n.
- Mô hình này giảm tốt đa viê ̣c phải sƣ̉ du ̣ng GWTTestcase khi muốn thƣ̉ các tính năng của hệ thống.
Sinh viên thực hiê ̣n : Đào Phan Quang K50 Lớp CNPM 55
- Model : thể hiện mô ̣t thƣ̣c thể nghiê ̣p vu ̣, thƣờng là các thƣ̣c thể dƣ̃ liê ̣u đƣợc lƣu trong cơ sở dƣ̃ liê ̣u . Tuy nhiên cũng có nhƣ̃ng kiểu thƣ̣c thể tinh giản của các thực thể đƣợc lƣu trữ , các thực thể này lƣu trữ lƣợng dữ liệu ít hơn nhằm giảm lƣợng dữ liệu phải truyền qua mạng . VD: khi ta lƣu thông tin cá nhân ta có thể có một lớp UserProfile gồm nhiểu thuộc tính (tên,địa chỉ ,ngày sinh v.v.) tuy nhiên khi chỉ cần liê ̣t kê ngƣời dùng ta chỉ cần tên do đó có thể có thêm lớp UserProfileLite với mô ̣t thuô ̣c tính tên.
- View : thành phần quyết định giao diện của chƣơng trình . Thành phần này hồn tồn khơng có liên hê ̣ với Model. Nó không biết nó sẽ hiển thị thông tin gì mà chỉ biết rằng nó sẽ có những thành phần gì . Ví dụ một giao diên hiển thị thông tin cá nhân gồm ảnh đại diện và tên chỉ biết rằng nó có một trƣờng hiển thi ̣ ảnh và một trƣờng hiển thị xâu . Ta có thể dùng View này để hiển thi ̣ thông tin về các ảnh đã tải lên cùng với tên ảnh nếu muốn.
- Presenter : gồm nhƣ̃ng xƣ̉ lý logic cho chƣơng trình . Thông thƣờ ng mô ̣t Presenter gắn với mô ̣t View , nó sẽ quyết định View đó hiển thị thông tin gì , các nút chức năng trên View đó thực hiện công việc gì.
- App Controller : gồm nhƣ̃ng xƣ̉ lý logic không thuô ̣c về mô ̣t Presenter nào và ở mức tồn chƣơng trình. Ví dụ nhƣ bớ trí, viê ̣c thay đổi các Presenter khi có yêu cầu và thông thƣờng lớp này thƣờng gắn với viê ̣c quản lý History .
III.4. Kiến trú c hê ̣ thống khi kết hơ ̣p GWT và MVP:
Sinh viên thực hiê ̣n : Đào Phan Quang K50 Lớp CNPM 56