Tiểu luận Mô hình MVC trong Java – Tài liệu text

Tiểu luận Mô hình MVC trong Java

Bạn đang xem bản rút gọn của tài liệu. Xem và tải ngay bản đầy đủ của tài liệu tại đây (347.62 KB, 28 trang )

HỌC VIỆN CÔNG NGHỆ BƯU CHÍNH VIỄN THÔNG
Khoa Công nghệ thông tin
ĐỀ TÀI
TÌM HIỂU MÔ HÌNH MVC TRONG JAVA
Môn: Lập trình hướng đối tượng
Giảng viên: Nguyễn Mạnh Sơn
Nhóm 10
Lục Thị Linh Nhâm _D12CN1
Nguyễn Thị Bình An _D12CN1
Phạm Thị Diễm_D12CN4
Hà Nội- 2014
Mục lục Trang
I. Tổng quan về MVC
1. Xuất xứ 1
2. Kiến trúc MVC 1
2.1. Khái niệm 2
2.2. Mô hình thực tế 3
2.3. Các mối quan hệ 5
2.3.1. Mối quan hệ giữa View và Controller 5
2.3.2. Mối quan hệ giữa View và Model 5
2.3.3. Quan hệ giữa Model và Controller 6
3. Ưu điểm và nhược điểm 6
3.1.Ưu điểm của MVC 6
3.2.Hạn chế của MVC 8
II. Thiết kế hệ thống theo MVC
1. Mô hình MVC dùng thực thể thuần (cổ điển) 8
1.1.Xây dựng Model 9
1.2.Xây dựng View 11
1.3.Xây dựng Control 12
1.4.Hàm main 13
2.Mô hình MVC với thực thể bean 13

2.1.Xây dựng Model 14
2.2.Xây dựng View 16
2.3.Hàm main 18
3. Mô hình MVC cải tiến 18
3.1.Xây dựng Model 19
3.2.Xây dựng View 20
3.3.Xây dựng Control 23
3.4.Hàm main 25
Tìm hiểu mô hình MVC trong java
I. Tổng quan về MVC
1. Xuất xứ
Sự ra đời của giao diện đồ họa (Graphical User Interface) và lập trình hướng đối
tượng (Object Oriented Programming) cho phép lập trình viên làm việc với những
thành phần đồ họa như những đối tượng có thuộc tính và phương thức riêng của nó.
Không dừng lại ở đó, những nhà nghiên cứu ở Xerox PARC còn đi xa hơn khi cho ra
đời kiến trúc MVC (viết tắt của Model – View – Controller).
MVC được phát minh tại tại phòng thí nghiệm Xerox Parc ở Palo Altovào những
năm 70của thế kỷ 20, bởi TrygveReenskaug và lần đầu tiên xuất hiện công khai là
trong trình biên dịch Smalltalk-80.
Sau đó hầu như không có thông tin nào về MVCtrong một thời gian dài, ngay cả
trong tài liệu Smalltalk-80. Tài liệu quan trọng đầu tiên về MVC được công bố trên
MVC là “ACookbookforUsing the Model-View-Controller User InterfaceParadigm in
Smalltalk-80”,của Glenn Krasner và Stephen Pope, xuất bản vào tháng 8 – tháng 9 năm
1988.
2. Kiến trúc MVC
Hình1.Kiến trúc MVC
4
Tìm hiểu mô hình MVC trong java
2.1. Khái niệm
Ý niệm chính của mô hình MVC là tách biệt phần ánh xạ, lưu trữ và xử lý dữ

liệu (Model) hoàn toàn với thành phần trình bày giao diện kết quả cho người dùng
hay phần giao diện giúp đón nhập nhập xuất cho người dùng (View).
Ngoài ra, việc tách biệt rời rạc giữa Model và View theo phân tích của chúng ta
đang thể hiện tính uy việt. Tuy nhiên, một ứng dụng có rất nhiều Model và nhiều
View, do vậy, mô hình cần có một thành phần lựa chọn và kết nối các thành phần
này lại với nhau theo cách hiệu quả nhất. Controller là một trong những đối tượng
đưa ra để đón nhận yêu cầu nhập xuất từ người dùng, xác định model tương ứng với
view nhập để đưa model xử lý, kết quả xử lý của model sẽ được chuyển đến
controller để controller xác định view kết xuất để đổ kết quả xử lý và hiển thị cho
người dùng.
Mô hình Model-View-Control chia các components của ứng dụng thành 3 loại
khác nhau đó là Model (mẫu), View (hiển thị), Control (điều khiển). Các components
của mô hình MVC đảm nhiệm một trách nhiệm nhất định và mỗi components đều độc
lập với components khác.Việc thay đổi một components sẽ không ảnh hưởng hoặc ảnh
hưởng rất ít đến các components khác. Nhiệm vụ của các components này là:
 Model(mẫu): Model đảm nhận nhiệm vụ cung cấp dữ liệu từ cơ sở dữ liệu và lưu trữ
các thông tin đó ở nơi chứa dữ liệu. Tất cả các Business Logic đều được thực thi ở
Model. Dữ liệu được nhập vào bởi người sử dụng qua View sẽ được kiểm tra ở Model
trước khi được lưu vào cơ sở dữ liệu. Truy xuất dữ liệu,sự hợp lệ của dữ liệu và data
saving logic là các thành phần của Model.
o Là các thành phần hỗ trợ ánh xạ dữ liệu vật lý lên bộ nhớ, lưu trữ dữ liệu tạm
thời trên bộ nhớ, hỗ trợ các cách thức xử lý dữ liệu, hỗ trợ khả năng giao tiếp
và trao đổi dữ liệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu.
o Cụ thể là một đối tượng Object trong khái niệm của lập trình hướng đối tượng
OOP và mang đầy đủ khái niệm và tính chất của một Object.
o Trong ứng dụng Web của Java, Model sẽ là JavaBean hay Enterprise
JavaBean hay Web Service.
 View (hiển thị): View trình bày việc hiển thị ứng dụng và nhận trách nhiệm lấy dữ liệu
từ người sử dụng,gửi các yêu cầu tới Controller và hiển thị kết quả đến người sử dụng.
HTML, JSPs, các thư viện và các file nguồn là các phần của view components.

o Là thành phần hỗ trợ trình bày dữ liệu hay kết quả ra màn hình, hỗ trợ nhập
thông tin từ phía người dùng.
5
Tìm hiểu mô hình MVC trong java
o Các thành phần này có khả năng truy cập Model, truy xuất Model thông qua
những hành vi mà Model cho phép nhưng View không thể thay đổi các thành
phần trong Model.
o Trong mô hình ứng dụng Web thì html, servlet, jsp … là những thành phần
đại diện cho View.
 Controller (điều khiển): Controller là trung gian giữa Model và View. Controller có
trách nhiệm nhận các yêu cầu từ Client. Khi mà yêu cầu được nhận từ Client,Controller
sẽ thực thi business logic thích hợp từ Model và sau đó xuất dữ liệu ra user sử dụng
View components. ActionServlet, Action và ActionForm và struct-config.xml là các
thành phần của Controller.
o Là các thành phần hỗ trợ kết nối người dùng server, đón nhập yêu cầu người
dùng, thực hiện chuyển xử lý, lựa chọn và cập nhật model và view tương ứng
để trình bày về phía người dùng.
o Hỗ trợ kết nối giữa người model và view, giúp model xác định được view
trình bày.
o Trong mô hình ứng dụng Web thì Servlet đóng vai trò của Controller.
2.2. Mô hình thực tế
Có thể lấy ví dụ như khi bạn xem phim truyền hình thì Model trong trường hợp này
là đầu đĩa, màn hình tivi đóng vai trò là View còn Controller chính là remote để bạn
điều khiển chuyển kênh, tăng giảm âm lượng…
Hay như khi các bạn thao tác trên điện thoại: View là màn hình điện thoại,
Controller là các nút bấm và Model là các chíp xử lý bên trong.
Để hiểu rõ hơn về mô hình MVC này, xin đưa ra một mô hình thực tế tiếp cận khái
niệm của mô hình này như sau: Mô hình tiếp cận về việc công việc hàng ngày chúng ta
thường làm để giải trí, đó là xem truyền hình.
• Một người A muốn xem các phim chọn lọc được lựa chọn từ các đĩa

CD/DVD trên truyền hình của nhà A
• Để đọc được các đĩa CD/DVD thì phải dùng đầu máy đọc đĩa trong nhà
A
• Đầu máy này đặc biệt không có nút điều khiển trực tiếp, đầu máy này
nhận hàng loạt các đĩa – tối đa là 5 cái, do vậy muốn kích hoạt và chọn đĩa xem A
bắt buộc phải sử dụng remote control – điều khiển từ xa
6
Tìm hiểu mô hình MVC trong java
• Như vậy, chúng ta sẽ nhận thấy cách thức A xem phim như sau
o A sẽ sử dụng remote control điều khiển đầu máy để chọn đĩa mà A
thích xem nhất để mở nó ra
o Đĩa được chọn từ đọc máy được đọc và trình chiếu trên màn hình
truyền hình
o Khi dữ liệu đã hiển thị trên màn hình tivi thì A sẽ thấy được nội
dung
o Và cách thức này sẽ được lập đi lập lại khi A chọn một phim khác,
đó là vẫn dùng đồ điều khiển để chọn đĩa và đầu đĩa đưa dữ liệu lên truyền
hình và A thấy. …
Mô hình tiếp cận được mô tả như hình vẽ sau
Hình 2.Mô hình MVC khi A xem phim.
• Qua hình ảnh mô tả trên, chúng ta nhận thấy rằng:
o Đầu máy là nơi xử lý dữ liệu, chọn lựa cách thức xử lý, nội dung
cần thiết, nghĩa là đầu máy đóng vai trò là Model.
7
Tìm hiểu mô hình MVC trong java
o Tivi chỉ làm nhiệm vụ duy nhất để trình bày kết quả mà đầu máy –
Model đã thực hiện, được lựa chọn. Tivi không thể lựa chọn và không có cách
chọn lựa là trình bày các thành phần truyền đến đã được xử lý. Tivi đóng vai
trò là View.
o Thành phần hỗ trợ đưa dữ liệu từ Model đến View đó là đồ điều

khiển remote, ngoài ra remote cũng là nơi kết nối người dùng với đầu máy với
tivi. Chức năng của điều khiển là chọn đúng model để đưa ra view. Remote
đóng vai trò là Controller.
• Dựa vào cách tiếp cận trên chúng ta thấy được sự tối ưu của MVC đó là:
o Khi chúng ta thay đổi kênh đang xem thành kênh khác thì việc
thay đổi không ảnh hưởng gì đến toàn hệ thống.
o Tương tự như thế nếu đầu máy hư thì thay đổi máy khác vẫn
không ảnh hưởng gì lớn.
o Như vậy, việc tách biệt giúp chúng ta có nhiều lợi ích trong việc
phân chia công việc và các xử lý công việc.
2.3 . Các mối quan hệ
2.3.1 Mối quan hệ giữa View và Controller
 Trong MVC truyền thống,các view và controller được kết hợp chặt chẽ với nhau. Mỗi
view được kết hợp với một controller duy nhất. Controller được xem như một Strategy
(sự quản lý) mà view sử dụng cho đầu vào. View cũng chịu trách nhiệm tạo ra các
khung nhìn và controller mới.
 Có sự logic cho rằng các khung nhìn và các controller có quan hệ chặt chẽ với
nhau.Hầu hết các nền GUI MVC,view và controller được trộn trong một đối tượng hay
còn được gọi là Document view: View và controller được kết hợp thành view, Model
trở thành một tài liệu.
 Passive Model luân phiên chịu trách nhiệm nhiều hơn so với controller,vì nó phải
thông báo cho các view khi có sự cập nhật
 MVC luân phiên hiện đại tỏ ra hữu ích hơn nhiều so với MVC truyền thống về việc
chịu trách nhiệm của View đến Controller trong thiết kế web. Controller chịu trách
nhiệm tạo ra và lựa chọn các View và View hướng dẫn đến việc chịu trách nhiệm ít
hơn đối với các Controller của nó
8
Tìm hiểu mô hình MVC trong java
2.3.2 Mối quan hệ giữa View và Model
Giữa Model và View trên khái niệm, đối tượng nào phụ thuộc đối tượng

nào?
o View lệ thuộc vào Model bởi vì khi các tổ chức interface của
Model thay đổi nghĩa là View phải thay đổi theo
o Chúng ta tránh nhầm lẫn về khái niệm ở trên là tách biệt
giữa View và Model là có lợi nhưng tại sao ở đây View lại lệ
thuộc Model? Khái niệm của chúng ta ở đây đó là tách biệt
dữ liệu và thành phần xử lý bên trong, hệ thống sẽ trở nên
uyển chuyển khi chúng ta thành đổi thành phần cài đặt
trong Model, không phải thay đổi interface Model. Và khái
niệm trên đã nêu rõ giữa dữ liệu vật lý và dữ liệu được chứa
trong Model
 View phụ thuộc vào Model. Các sự thay đổi đối với giao diện Model đòi hỏi các sự
thay đổi song song trong View.
 Không có sự tách biệt rõ ràng giữa Model và View.
Model chuyển dữ liệu ra và dữ liệu được chuyển vào View để tác nghiệp một cách
dễ dàng
2.3.3 Quan hệ giữa Model và Controller
• Dựa trên bản chất của MVC, khái niệm và cách tiếp cận chúng ta
nhận thấy mối quan hệ giữa controller và model là như thế nào?
Giữa Controller và Model, đối tượng nào phụ thuộc đối tượng nào?
o Ý tưởng đó là khi chúng ta thay đổi đầu máy đọc, remote
có thay đổi theo hay không? Hay chúng ta vẫn dùng
remote cũ (không tính khái niệm điều khiển đa năng)?
remote được thiết kế dựa trên đầu máy hay đầu máy được
thiết kế dựa trên đồ điều khiển?
o Câu trả lời chúng ta quá rõ ràng, đó là controller phụ thuộc
vào model bởi vì controller được thiết kế đề kết nối với
model, điều khiển, truy xuất model. Do vậy, model có sự
thay đổi là controller phải thay đổi theo để có thể truy xuất
và điều khiển model cho phù hợp

Controller phụ thuộc vào Model. Các sự thay đổi đối với giao diện Model có thể
yêu cầu sự thay đổi song song đối với Controller.
3. Ưu điểm và nhược điểm
9
Tìm hiểu mô hình MVC trong java
3.1 Ưu điểm của MVC
o Tính linh hoạt và uyển chuyển cao: Cho phép người lập trình có
thể tách biệt công việc trong quá trình xây dựng chức năng cho
ứng dụng và quá trình xây dựng giao diện cho người dùng, thể
hiện tính chuyên nghiệp trong lập trình, phân tích thiết kế giúp
phát triển ứng dụng nhanh hơn.
Cho phép việc thay đổi thành phần của dữ liệu (Model) sẽ
không ảnh hưởng nhiều đến giao diện của người dùng
Vì mô hình đưa ra Model để không cho người dùng thao tác trực
tiếp vào dữ liệu vật lý (Cơ sở dữ liệu hay là tập tin) mà phải thông qua
Model, do vậy cho dù dữ liệu vật lý thay đổi cấu trúc nhưng cấu trúc
Model cho việc truy cập, xử lý, lưu trữ dữ liệu sẽ không bị ảnh hưởng.
Nhìn theo khái niệm các thành phần giao tiếp trên Model là tên hàm –
tham số truyền (interface) ít khi thay đổi, nội dung thay đổi chính là
cách thức cài đặt bên trong hàm. Nhưng nội dung đó người sử dụng chức
năng trên giao diện không quan tâm vì đa số họ chỉ quan tâm interface
là gì, giá trị nhập và kết xuất ra sao.
o Tính tin cậy (reliability): việc chia từng phần riêng biệt giúp
chúng ta sửa đổi từng thành phần riêng biệt, không ảnh hưởng, có
thể thay thế thành từng phần tương đương, có thể chia công việc
theo nhóm, biên dịch độc lập, tăng cường khả năng tích hợp với
khả năng đúng đắn cao
o Tính tương thích cao (compatibility): có khả năng sử dụng các
loại công nghệ khác nhau không lệ thuộc vì chúng ta đã được tách
biệt và khái niệm cho từng loại thành phần riêng biệt

o Tính tái sử dụng (reusable): chúng ta có thể sử dụng các thành
phần chia cắt lại trong các ứng dụng khác hay sử dụng lại nhiều
lần trong cùng một ứng dụng, tăng tính hiệu quả trong lập trình
o Khả năng triền khai nhanh chóng và bảo trì nhanh chóng (quick
deploy and easy maintenance): vì các thành phần độc lập với
nhau
o Mang đến nhiều thuận lợi cho người sử dụng: giúp dễ dàngtrong
quá trình làm việc với ứng dụng và bảo trì, nâng cấpứng dụng.
 Các View và các Controller khác nhau có thể được thay đổi để đưa ra sự lựa chọn các
giao diện người sử dụng đối với cùng 1 Model. Chẳng hạn như, cùng 1 dữ liệu Model
có thể được hiển thị bởi biểu đồ bar, hay biểu đồ pie, hoặc spreadsheet.
 Các thành phần hợp thành giao diện người sử dụng
10
Tìm hiểu mô hình MVC trong java
 Bởi vì MVC đòi hỏi giao diện người sử dụng ứng dụng được cấu trúc thành các đối
tượng kế thừa nhau và định nghĩa các quan hệ chuẩn giữa các đối tượng này nên chúng
sẽ có phiên bản chung.
 Chúng thường được gọi là các thành phần giao diện kết hợp với các View và các
Controller thành một đối tượng đơn. WACT là một ví dụvề việc đưa ra 1 tập các thành
phần phong phú tương tự nhau đối với việc phát triển web mà duy trì được sự tách biệt
giữa View và Controller. Các thành phần thúc đẩy sự sử dụng lại và cắt giảm sự cần
thiết đối với các lớp con đặc biệt. Các thành phần này được biết đến như là các View
có khả năng cắm vào trong smalltalk MVC.
 Nhiều View đồng thời của một Model
Nhiều View khác nhau có thể hoạt động tại cùng một thời điểm. Mỗi View mô tả
đồng thời và độc lập thông tin giống nhau từ 1 Model. Điều này áp dụng nhiều đối với
GUI MVC hơn là web MVC.
 Các khung nhìn được đồng bộ hóa
 Cơ chế truyền sự thay đổi đảm bảo rằng tất cả các khung nhìn có thể được phản ứng
một cách đồng thời trạng thái hiện tại của Model.

 Dễ dàng hơn trong việc thay đổi giao diện người sử dụng
 Giúp dễ dàng kiểm thử chức năng chính của ứng dụng vì nó được đóng gói vào Model
3.2 Hạn chế của MVC
 Gia tăng độ phức tạp:
Đối với những dự án nhỏ, áp dụng mô hình MVC gây cồng kềnh, tốn thời gian
trong quá trình phát triển.
Tốn thời gian trung chuyển dữ liệu giữa các thành phần
 Sự kết nối chặt chẽ của view và controller với model
 Sự thay đổi đối với giao diện model đòi hỏi sự thay đổi song song trong view và có thể
đòi hỏi sự thay đổi thêm đối với controller. Sự thay đổi code nào đó có thể trở nên khó
khăn hơn
 Sự tách biệt rõ ràng là rất khó, đôi khi là không thể
11
Tìm hiểu mô hình MVC trong java
 Tiềm ẩn sự cập nhật dư thừa: Cơ chế truyền sự thay đổi có thể không hiệu quả khi
Model thay đổi thường xuyên đòi hỏi nhiều thông báo thay đổi. Khi sử dụng passive
Model sẽ giải quyết được vấn đề này.
II. Thiết kế hệ thống theo MVC
Có thể áp dụng một số dạng mô hình MVC phổ biến:
 Mô hình MVC dùng thực thể thuần (cổ điển)
 Mô hình MVC dùng bean
 Mô hình MVC cải tiến (hiện đại)
1. Mô hình MVC dùng thực thể thuần (cổ điển)
– Đặc trưng:
 Lớp thực thể chỉ chứa các thuộc tính và các phương thức get/set cho mỗi thuộc
tính (còn gọi là các lớp thực thể thuần)
 Các thao tác liên quan đến dữ liệu đều đặt trong lớp điều khiển.
Ví dụ: Chương trình thực hiện các phép tính với 2 số nguyên .
Chức năng tính toán của Caculator theo MVC cải tiến:
 Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bị

click thì lớp View bắt sự kiện ,cập nhật dữ liệu ở Model rồi truyền dữ liệu này cho
Control.
 Trên lớp Control thực hiện thao tác tính toán .
 View hiển thị kết quả tính toán đã thực hiện ở Control
12
Tìm hiểu mô hình MVC trong java
Hình 3. Sơ đồ dùng thực thể thuần
1.1.Xây dựng Model
public class Caculator {
private long a, b;
private char toantu;
public Caculator() {
}
public Caculator(int a, int b, char toantu) {
this.a = a;
this.b = b;
this.toantu = toantu;
}
public long getA() {
13
Tìm hiểu mô hình MVC trong java
return a;
}
public long getB() {
return b;
}
public char getToantu() {
return toantu;
}
public void setA(long a) {

this.a = a;
}
public void setB(long b) {
this.b = b;
}
public void setToantu(char c) {
this.toantu =c;
}
}
1.2.Xây dựng View
public class View extends JFrame implements ActionListener{
public View(){
initComponents();
}
private JButton cong, tru, nhan, chia;
private JLabel soa, sob, kqua;
private JTextField ain, bin, res;
private JPanel panel1 = new JPanel();
14
Tìm hiểu mô hình MVC trong java
private void initComponents(){
cong = new JButton(” Tổng “); cong.setSize(4, 15);
tru = new JButton(” Hiệu “); tru.setSize(15, 15);
nhan = new JButton(” Tích “); nhan.setSize(4, 15);
chia = new JButton(“Thương”); chia.setSize(4, 15);
cong.addActionListener(this);
tru.addActionListener(this);
nhan.addActionListener(this);
chia.addActionListener(this);
soa = new JLabel(“Nhập số a:”);

sob = new JLabel(“Nhập số b:”);
kqua = new JLabel(“Kết quả:”);
ain = new JTextField(10);
bin = new JTextField(10);
res = new JTextField(10);
panel1.add(soa); panel1.add(ain);
panel1.add(sob); panel1.add(bin);
panel1.add(kqua); panel1.add(res);
panel1.add(cong); panel1.add(tru);
panel1.add(nhan); panel1.add(chia);
setSize(222,243);
setContentPane(panel1);
getContentPane().setLayout(new FlowLayout(2,10,10));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae) {
try{
Object bam = ae.getSource();
Caculator cal=new Caculator();
cal.setA(Long.parseLong(ain.getText()));
cal.setB(Long.parseLong(bin.getText()));
if(bam == cong) cal.setToantu(‘+’);
if(bam == tru) cal.setToantu(‘-‘);
if(bam == nhan) cal.setToantu(‘*’);
if(bam == chia){
if(Long.parseLong(bin.getText())== 0) throw new ABCException();
cal.setToantu(‘/’);
}
Control con=new Control();

15
Tìm hiểu mô hình MVC trong java
res.setText(con.tinhtoan(cal)+” “);
}catch(Exception e){
JOptionPane.showMessageDialog(null, “Nhap loi!”);
}
}
}
1.3.Xây dựng Control
public class Control {
public Control() {
}
public long tinhtoan(Caculator cal) {
switch (cal.getToantu()) {
case ‘+’:
return (cal.getA() + cal.getB());
case ‘-‘:
return (cal.getA() – cal.getB());
case ‘*’:
return (cal.getA() * cal.getB());
case ‘/’:
return (cal.getA() / cal.getB());
}
return 0;
}
}
1.4. Hàm main
public class MAIN {
public static void main(String[] args) {
View view=new View();

view.setVisible(true);
}
}
2. Mô hình MVC với thực thể bean
-Đặc trưng:
 Lớp thực thể chứa các thuộc tính và các phương thức get/set cho mỗi thuộc tính,
và các thao tác liên quan đến dữ liệu mà liên quan đến lớp thực thể nào thì đều
đặt trong lớp điều khiển đó. Các lớp thực thể kiểu này được gọi là lớp bean.
16
Tìm hiểu mô hình MVC trong java
 Trong nhiều trường hợp, không còn cần đến lớp điều khiển nữa vì lớp bean đã
kiêm luôn vai trò của lớp điều khiển
Ví dụ: Chương trình thực hiện các phép tính với 2 số nguyên .
Chức năng tính toán của Caculator theo MVC với thực thể bean:
 Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bị
click thì lớp View sẽ xử lý sự kiện ,trong đó gọi đến thao tác tính toán trong lớp
Caculator, sau đó View sẽ hiện thị kết quả.
Hình 4. Sơ đồ
17
Tìm hiểu mô hình MVC trong java
2.1. Xây dựng Model
public class Caculator {
private long a, b;
private char toantu;
public Caculator() {
}
public Caculator(int a, int b, char toantu) {
this.a = a;
this.b = b;
this.toantu = toantu;

}
public long getA() {
return a;
}
public long getB() {
return b;
}
public char getToantu() {
return toantu;
}
public void setA(long a) {
this.a = a;
}
18
Tìm hiểu mô hình MVC trong java
public void setB(long b) {
this.b = b;
}
public void setToantu(char c) {
this.toantu =c;
}
public long tinhtoan(){
switch(toantu){
case ‘+’: return (a + b);
case ‘-‘: return (a – b);
case ‘*’: return (a * b);
case ‘/’: return (a / b);
}
return 0;
}

2.2.Xây dựng view
public class View extends JFrame implements ActionListener{
public View(){
initComponents();
}
private JButton cong, tru, nhan, chia;
private JLabel soa, sob, kqua;
private JTextField ain, bin, res;
private JPanel panel1 = new JPanel();
private void initComponents(){
cong = new JButton(” Tổng “); cong.setSize(4, 15);
tru = new JButton(” Hiệu “); tru.setSize(15, 15);
nhan = new JButton(” Tích “); nhan.setSize(4, 15);
chia = new JButton(“Thương”); chia.setSize(4, 15);
19
Tìm hiểu mô hình MVC trong java
cong.addActionListener(this);
tru.addActionListener(this);
nhan.addActionListener(this);
chia.addActionListener(this);
soa = new JLabel(“Nhập số a:”);
sob = new JLabel(“Nhập số b:”);
kqua = new JLabel(“Kết quả:”);
ain = new JTextField(10);
bin = new JTextField(10);
res = new JTextField(10);
panel1.add(soa); panel1.add(ain);
panel1.add(sob); panel1.add(bin);
panel1.add(kqua); panel1.add(res);
panel1.add(cong); panel1.add(tru);

panel1.add(nhan); panel1.add(chia);

setSize(222,243);
setContentPane(panel1);
getContentPane().setLayout(new FlowLayout(2,10,10));
setVisible(true);
setDefaultCloseOperation(EXIT_ON_CLOSE);
}
public void actionPerformed(ActionEvent ae) {
try{
Object bam = ae.getSource();
Caculator cal=new Caculator();
cal.setA(Long.parseLong(ain.getText()));
cal.setB(Long.parseLong(bin.getText()));
if(bam == cong) cal.setToantu(‘+’);
if(bam == tru) cal.setToantu(‘-‘);
if(bam == nhan) cal.setToantu(‘*’);
if(bam == chia){
if(Long.parseLong(bin.getText())== 0) throw new ABCException();
cal.setToantu(‘/’);
}
res.setText(cal.tinhtoan()+” “);
}catch(Exception e){
JOptionPane.showMessageDialog(null, “Nhap loi!”);
}

20
Tìm hiểu mô hình MVC trong java
}
}

2.3.Hàm Main
public class MAIN {
public static void main(String[] args) {
View view=new View();
view.setVisible(true);
}
}
3. Mô hình MVC cải tiến
– Đặc trưng:
 Lớp thực thể thuần
 Các thao tác liên quan đến CSDL đều đặt trong lớp điều khiển
Các lớp điều khiển giành quyền điều khiển toàn bộ các lớp view và control
Ví dụ: Chương trình thực hiện các phép tính với 2 số nguyên .
Chức năng tính toán của Caculator theo MVC cải tiến:
 Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bị
click thì lớp View này không được xử lí gì mà phải truyền sự kiện này xuống cho lớp
điều khiển (Control)
 Để làm được việc này, trên lớp View có phương thức truyền quyền điều khiển
cho lớp điều khiển, và trong lớp điều khiển có một lớp nội tại (inner class) dùng
để nhận sự kiện do lớp biên truyền xuống để xử lý.
21
Tìm hiểu mô hình MVC trong java
Hình5. Sơ đồ
3.1.Xây dựng Model
public class Caculator {
private long a, b;
public Caculator() {
}
public Caculator(long a, long b) {
this.a = a;

this.b = b;
}
22
Tìm hiểu mô hình MVC trong java
public long getA() {
return a;
}
public void setA(long a) {
this.a = a;
}
public long getB() {
return b;
}
public void setB(long b) {
this.b = b;
}
}
3.2.Xây dựng View
public class View extends JFrame implements ActionListener{
public View(){
initComponents();
}
public JButton getCong() {
return cong;
}
public JButton getTru() {
return tru;
}
23
Tìm hiểu mô hình MVC trong java

public JButton getNhan() {
return nhan;
}
public JButton getChia() {
return chia;
}
private JButton cong, tru, nhan, chia;
private JLabel soa, sob, kqua;
private JTextField ain, bin, res;
private JPanel panel1 = new JPanel();
private void initComponents(){
cong = new JButton(” Tổng “); cong.setSize(4, 15);
tru = new JButton(” Hiệu “); tru.setSize(15, 15);
nhan = new JButton(” Tích “); nhan.setSize(4, 15);
chia = new JButton(“Thương”); chia.setSize(4, 15);
soa = new JLabel(“Nhập số a:”);
sob = new JLabel(“Nhập số b:”);
kqua = new JLabel(“Kết quả:”);
ain = new JTextField(10);
bin = new JTextField(10);
res = new JTextField(10);
panel1.add(soa); panel1.add(ain);
panel1.add(sob); panel1.add(bin);
panel1.add(kqua); panel1.add(res);
24
Tìm hiểu mô hình MVC trong java
panel1.add(cong); panel1.add(tru);
panel1.add(nhan); panel1.add(chia);
setSize(222,243);
setContentPane(panel1);

getContentPane().setLayout(new FlowLayout(2,10,10));
}
public Caculator getCaculator(){
Caculator cal=new Caculator();
try{
cal.setA(Long.parseLong(ain.getText()));
cal.setB(Long.parseLong(bin.getText()));
}catch(Exception e){
JOptionPane.showMessageDialog(null, “Nhap loi!”);
}
return cal;
}
public void addkq(String kq){
res.setText(kq);
}
public void addButtonAddListener(ActionListener ac) {
cong.addActionListener(ac);
tru.addActionListener(ac);
nhan.addActionListener(ac);
chia.addActionListener(ac);
25

2.1.Xây dựng Model 142.2.Xây dựng View 162.3.Hàm main 183. Mô hình MVC cải tiến 183.1.Xây dựng Model 193.2.Xây dựng View 203.3.Xây dựng Control 233.4.Hàm main 25Tìm hiểu mô hình MVC trong javaI. Tổng quan về MVC1. Xuất xứSự ra đời của giao diện đồ họa (Graphical User Interface) và lập trình hướng đốitượng (Object Oriented Programming) cho phép lập trình viên làm việc với nhữngthành phần đồ họa như những đối tượng có thuộc tính và phương thức riêng của nó.Không dừng lại ở đó, những nhà nghiên cứu ở Xerox PARC còn đi xa hơn khi cho rađời kiến trúc MVC (viết tắt của Model – View – Controller).MVC được phát minh tại tại phòng thí nghiệm Xerox Parc ở Palo Altovào nhữngnăm 70của thế kỷ 20, bởi TrygveReenskaug và lần đầu tiên xuất hiện công khai làtrong trình biên dịch Smalltalk-80.Sau đó hầu như không có thông tin nào về MVCtrong một thời gian dài, ngay cảtrong tài liệu Smalltalk-80. Tài liệu quan trọng đầu tiên về MVC được công bố trênMVC là “ACookbookforUsing the Model-View-Controller User InterfaceParadigm inSmalltalk-80”,của Glenn Krasner và Stephen Pope, xuất bản vào tháng 8 – tháng 9 năm1988.2. Kiến trúc MVCHình1.Kiến trúc MVCTìm hiểu mô hình MVC trong java2.1. Khái niệmÝ niệm chính của mô hình MVC là tách biệt phần ánh xạ, lưu trữ và xử lý dữliệu (Model) hoàn toàn với thành phần trình bày giao diện kết quả cho người dùnghay phần giao diện giúp đón nhập nhập xuất cho người dùng (View).Ngoài ra, việc tách biệt rời rạc giữa Model và View theo phân tích của chúng tađang thể hiện tính uy việt. Tuy nhiên, một ứng dụng có rất nhiều Model và nhiềuView, do vậy, mô hình cần có một thành phần lựa chọn và kết nối các thành phầnnày lại với nhau theo cách hiệu quả nhất. Controller là một trong những đối tượngđưa ra để đón nhận yêu cầu nhập xuất từ người dùng, xác định model tương ứng vớiview nhập để đưa model xử lý, kết quả xử lý của model sẽ được chuyển đếncontroller để controller xác định view kết xuất để đổ kết quả xử lý và hiển thị chongười dùng.Mô hình Model-View-Control chia các components của ứng dụng thành 3 loạikhác nhau đó là Model (mẫu), View (hiển thị), Control (điều khiển). Các componentscủa mô hình MVC đảm nhiệm một trách nhiệm nhất định và mỗi components đều độclập với components khác.Việc thay đổi một components sẽ không ảnh hưởng hoặc ảnhhưởng rất ít đến các components khác. Nhiệm vụ của các components này là: Model(mẫu): Model đảm nhận nhiệm vụ cung cấp dữ liệu từ cơ sở dữ liệu và lưu trữcác thông tin đó ở nơi chứa dữ liệu. Tất cả các Business Logic đều được thực thi ởModel. Dữ liệu được nhập vào bởi người sử dụng qua View sẽ được kiểm tra ở Modeltrước khi được lưu vào cơ sở dữ liệu. Truy xuất dữ liệu,sự hợp lệ của dữ liệu và datasaving logic là các thành phần của Model.o Là các thành phần hỗ trợ ánh xạ dữ liệu vật lý lên bộ nhớ, lưu trữ dữ liệu tạmthời trên bộ nhớ, hỗ trợ các cách thức xử lý dữ liệu, hỗ trợ khả năng giao tiếpvà trao đổi dữ liệu giữa các đối tượng khác trong bộ nhớ và cơ sở dữ liệu.o Cụ thể là một đối tượng Object trong khái niệm của lập trình hướng đối tượngOOP và mang đầy đủ khái niệm và tính chất của một Object.o Trong ứng dụng Web của Java, Model sẽ là JavaBean hay EnterpriseJavaBean hay Web Service. View (hiển thị): View trình bày việc hiển thị ứng dụng và nhận trách nhiệm lấy dữ liệutừ người sử dụng,gửi các yêu cầu tới Controller và hiển thị kết quả đến người sử dụng.HTML, JSPs, các thư viện và các file nguồn là các phần của view components.o Là thành phần hỗ trợ trình bày dữ liệu hay kết quả ra màn hình, hỗ trợ nhậpthông tin từ phía người dùng.Tìm hiểu mô hình MVC trong javao Các thành phần này có khả năng truy cập Model, truy xuất Model thông quanhững hành vi mà Model cho phép nhưng View không thể thay đổi các thànhphần trong Model.o Trong mô hình ứng dụng Web thì html, servlet, jsp … là những thành phầnđại diện cho View. Controller (điều khiển): Controller là trung gian giữa Model và View. Controller cótrách nhiệm nhận các yêu cầu từ Client. Khi mà yêu cầu được nhận từ Client,Controllersẽ thực thi business logic thích hợp từ Model và sau đó xuất dữ liệu ra user sử dụngView components. ActionServlet, Action và ActionForm và struct-config.xml là cácthành phần của Controller.o Là các thành phần hỗ trợ kết nối người dùng server, đón nhập yêu cầu ngườidùng, thực hiện chuyển xử lý, lựa chọn và cập nhật model và view tương ứngđể trình bày về phía người dùng.o Hỗ trợ kết nối giữa người model và view, giúp model xác định được viewtrình bày.o Trong mô hình ứng dụng Web thì Servlet đóng vai trò của Controller.2.2. Mô hình thực tếCó thể lấy ví dụ như khi bạn xem phim truyền hình thì Model trong trường hợp nàylà đầu đĩa, màn hình tivi đóng vai trò là View còn Controller chính là remote để bạnđiều khiển chuyển kênh, tăng giảm âm lượng…Hay như khi các bạn thao tác trên điện thoại: View là màn hình điện thoại,Controller là các nút bấm và Model là các chíp xử lý bên trong.Để hiểu rõ hơn về mô hình MVC này, xin đưa ra một mô hình thực tế tiếp cận kháiniệm của mô hình này như sau: Mô hình tiếp cận về việc công việc hàng ngày chúng tathường làm để giải trí, đó là xem truyền hình.• Một người A muốn xem các phim chọn lọc được lựa chọn từ các đĩaCD/DVD trên truyền hình của nhà A• Để đọc được các đĩa CD/DVD thì phải dùng đầu máy đọc đĩa trong nhà• Đầu máy này đặc biệt không có nút điều khiển trực tiếp, đầu máy nàynhận hàng loạt các đĩa – tối đa là 5 cái, do vậy muốn kích hoạt và chọn đĩa xem Abắt buộc phải sử dụng remote control – điều khiển từ xaTìm hiểu mô hình MVC trong java• Như vậy, chúng ta sẽ nhận thấy cách thức A xem phim như sauo A sẽ sử dụng remote control điều khiển đầu máy để chọn đĩa mà Athích xem nhất để mở nó rao Đĩa được chọn từ đọc máy được đọc và trình chiếu trên màn hìnhtruyền hìnho Khi dữ liệu đã hiển thị trên màn hình tivi thì A sẽ thấy được nộidungo Và cách thức này sẽ được lập đi lập lại khi A chọn một phim khác,đó là vẫn dùng đồ điều khiển để chọn đĩa và đầu đĩa đưa dữ liệu lên truyềnhình và A thấy. …Mô hình tiếp cận được mô tả như hình vẽ sauHình 2.Mô hình MVC khi A xem phim.• Qua hình ảnh mô tả trên, chúng ta nhận thấy rằng:o Đầu máy là nơi xử lý dữ liệu, chọn lựa cách thức xử lý, nội dungcần thiết, nghĩa là đầu máy đóng vai trò là Model.Tìm hiểu mô hình MVC trong javao Tivi chỉ làm nhiệm vụ duy nhất để trình bày kết quả mà đầu máy –Model đã thực hiện, được lựa chọn. Tivi không thể lựa chọn và không có cáchchọn lựa là trình bày các thành phần truyền đến đã được xử lý. Tivi đóng vaitrò là View.o Thành phần hỗ trợ đưa dữ liệu từ Model đến View đó là đồ điềukhiển remote, ngoài ra remote cũng là nơi kết nối người dùng với đầu máy vớitivi. Chức năng của điều khiển là chọn đúng model để đưa ra view. Remoteđóng vai trò là Controller.• Dựa vào cách tiếp cận trên chúng ta thấy được sự tối ưu của MVC đó là:o Khi chúng ta thay đổi kênh đang xem thành kênh khác thì việcthay đổi không ảnh hưởng gì đến toàn hệ thống.o Tương tự như thế nếu đầu máy hư thì thay đổi máy khác vẫnkhông ảnh hưởng gì lớn.o Như vậy, việc tách biệt giúp chúng ta có nhiều lợi ích trong việcphân chia công việc và các xử lý công việc.2.3 . Các mối quan hệ2.3.1 Mối quan hệ giữa View và Controller Trong MVC truyền thống,các view và controller được kết hợp chặt chẽ với nhau. Mỗiview được kết hợp với một controller duy nhất. Controller được xem như một Strategy(sự quản lý) mà view sử dụng cho đầu vào. View cũng chịu trách nhiệm tạo ra cáckhung nhìn và controller mới. Có sự logic cho rằng các khung nhìn và các controller có quan hệ chặt chẽ vớinhau.Hầu hết các nền GUI MVC,view và controller được trộn trong một đối tượng haycòn được gọi là Document view: View và controller được kết hợp thành view, Modeltrở thành một tài liệu. Passive Model luân phiên chịu trách nhiệm nhiều hơn so với controller,vì nó phảithông báo cho các view khi có sự cập nhật MVC luân phiên hiện đại tỏ ra hữu ích hơn nhiều so với MVC truyền thống về việcchịu trách nhiệm của View đến Controller trong thiết kế web. Controller chịu tráchnhiệm tạo ra và lựa chọn các View và View hướng dẫn đến việc chịu trách nhiệm íthơn đối với các Controller của nóTìm hiểu mô hình MVC trong java2.3.2 Mối quan hệ giữa View và ModelGiữa Model và View trên khái niệm, đối tượng nào phụ thuộc đối tượngnào?o View lệ thuộc vào Model bởi vì khi các tổ chức interface củaModel thay đổi nghĩa là View phải thay đổi theoo Chúng ta tránh nhầm lẫn về khái niệm ở trên là tách biệtgiữa View và Model là có lợi nhưng tại sao ở đây View lại lệthuộc Model? Khái niệm của chúng ta ở đây đó là tách biệtdữ liệu và thành phần xử lý bên trong, hệ thống sẽ trở nênuyển chuyển khi chúng ta thành đổi thành phần cài đặttrong Model, không phải thay đổi interface Model. Và kháiniệm trên đã nêu rõ giữa dữ liệu vật lý và dữ liệu được chứatrong Model View phụ thuộc vào Model. Các sự thay đổi đối với giao diện Model đòi hỏi các sựthay đổi song song trong View. Không có sự tách biệt rõ ràng giữa Model và View.Model chuyển dữ liệu ra và dữ liệu được chuyển vào View để tác nghiệp một cáchdễ dàng2.3.3 Quan hệ giữa Model và Controller• Dựa trên bản chất của MVC, khái niệm và cách tiếp cận chúng tanhận thấy mối quan hệ giữa controller và model là như thế nào?Giữa Controller và Model, đối tượng nào phụ thuộc đối tượng nào?o Ý tưởng đó là khi chúng ta thay đổi đầu máy đọc, remotecó thay đổi theo hay không? Hay chúng ta vẫn dùngremote cũ (không tính khái niệm điều khiển đa năng)?remote được thiết kế dựa trên đầu máy hay đầu máy đượcthiết kế dựa trên đồ điều khiển?o Câu trả lời chúng ta quá rõ ràng, đó là controller phụ thuộcvào model bởi vì controller được thiết kế đề kết nối vớimodel, điều khiển, truy xuất model. Do vậy, model có sựthay đổi là controller phải thay đổi theo để có thể truy xuấtvà điều khiển model cho phù hợpController phụ thuộc vào Model. Các sự thay đổi đối với giao diện Model có thểyêu cầu sự thay đổi song song đối với Controller.3. Ưu điểm và nhược điểmTìm hiểu mô hình MVC trong java3.1 Ưu điểm của MVCo Tính linh hoạt và uyển chuyển cao: Cho phép người lập trình cóthể tách biệt công việc trong quá trình xây dựng chức năng choứng dụng và quá trình xây dựng giao diện cho người dùng, thểhiện tính chuyên nghiệp trong lập trình, phân tích thiết kế giúpphát triển ứng dụng nhanh hơn.Cho phép việc thay đổi thành phần của dữ liệu (Model) sẽkhông ảnh hưởng nhiều đến giao diện của người dùngVì mô hình đưa ra Model để không cho người dùng thao tác trựctiếp vào dữ liệu vật lý (Cơ sở dữ liệu hay là tập tin) mà phải thông quaModel, do vậy cho dù dữ liệu vật lý thay đổi cấu trúc nhưng cấu trúcModel cho việc truy cập, xử lý, lưu trữ dữ liệu sẽ không bị ảnh hưởng.Nhìn theo khái niệm các thành phần giao tiếp trên Model là tên hàm –tham số truyền (interface) ít khi thay đổi, nội dung thay đổi chính làcách thức cài đặt bên trong hàm. Nhưng nội dung đó người sử dụng chứcnăng trên giao diện không quan tâm vì đa số họ chỉ quan tâm interfacelà gì, giá trị nhập và kết xuất ra sao.o Tính tin cậy (reliability): việc chia từng phần riêng biệt giúpchúng ta sửa đổi từng thành phần riêng biệt, không ảnh hưởng, cóthể thay thế thành từng phần tương đương, có thể chia công việctheo nhóm, biên dịch độc lập, tăng cường khả năng tích hợp vớikhả năng đúng đắn caoo Tính tương thích cao (compatibility): có khả năng sử dụng cácloại công nghệ khác nhau không lệ thuộc vì chúng ta đã được táchbiệt và khái niệm cho từng loại thành phần riêng biệto Tính tái sử dụng (reusable): chúng ta có thể sử dụng các thànhphần chia cắt lại trong các ứng dụng khác hay sử dụng lại nhiềulần trong cùng một ứng dụng, tăng tính hiệu quả trong lập trìnho Khả năng triền khai nhanh chóng và bảo trì nhanh chóng (quickdeploy and easy maintenance): vì các thành phần độc lập vớinhauo Mang đến nhiều thuận lợi cho người sử dụng: giúp dễ dàngtrongquá trình làm việc với ứng dụng và bảo trì, nâng cấpứng dụng. Các View và các Controller khác nhau có thể được thay đổi để đưa ra sự lựa chọn cácgiao diện người sử dụng đối với cùng 1 Model. Chẳng hạn như, cùng 1 dữ liệu Modelcó thể được hiển thị bởi biểu đồ bar, hay biểu đồ pie, hoặc spreadsheet. Các thành phần hợp thành giao diện người sử dụng10Tìm hiểu mô hình MVC trong java Bởi vì MVC đòi hỏi giao diện người sử dụng ứng dụng được cấu trúc thành các đốitượng kế thừa nhau và định nghĩa các quan hệ chuẩn giữa các đối tượng này nên chúngsẽ có phiên bản chung. Chúng thường được gọi là các thành phần giao diện kết hợp với các View và cácController thành một đối tượng đơn. WACT là một ví dụvề việc đưa ra 1 tập các thànhphần phong phú tương tự nhau đối với việc phát triển web mà duy trì được sự tách biệtgiữa View và Controller. Các thành phần thúc đẩy sự sử dụng lại và cắt giảm sự cầnthiết đối với các lớp con đặc biệt. Các thành phần này được biết đến như là các Viewcó khả năng cắm vào trong smalltalk MVC. Nhiều View đồng thời của một ModelNhiều View khác nhau có thể hoạt động tại cùng một thời điểm. Mỗi View mô tảđồng thời và độc lập thông tin giống nhau từ 1 Model. Điều này áp dụng nhiều đối vớiGUI MVC hơn là web MVC. Các khung nhìn được đồng bộ hóa Cơ chế truyền sự thay đổi đảm bảo rằng tất cả các khung nhìn có thể được phản ứngmột cách đồng thời trạng thái hiện tại của Model. Dễ dàng hơn trong việc thay đổi giao diện người sử dụng Giúp dễ dàng kiểm thử chức năng chính của ứng dụng vì nó được đóng gói vào Model3.2 Hạn chế của MVC Gia tăng độ phức tạp:Đối với những dự án nhỏ, áp dụng mô hình MVC gây cồng kềnh, tốn thời giantrong quá trình phát triển.Tốn thời gian trung chuyển dữ liệu giữa các thành phần Sự kết nối chặt chẽ của view và controller với model Sự thay đổi đối với giao diện model đòi hỏi sự thay đổi song song trong view và có thểđòi hỏi sự thay đổi thêm đối với controller. Sự thay đổi code nào đó có thể trở nên khókhăn hơn Sự tách biệt rõ ràng là rất khó, đôi khi là không thể11Tìm hiểu mô hình MVC trong java Tiềm ẩn sự cập nhật dư thừa: Cơ chế truyền sự thay đổi có thể không hiệu quả khiModel thay đổi thường xuyên đòi hỏi nhiều thông báo thay đổi. Khi sử dụng passiveModel sẽ giải quyết được vấn đề này.II. Thiết kế hệ thống theo MVCCó thể áp dụng một số dạng mô hình MVC phổ biến: Mô hình MVC dùng thực thể thuần (cổ điển) Mô hình MVC dùng bean Mô hình MVC cải tiến (hiện đại)1. Mô hình MVC dùng thực thể thuần (cổ điển)- Đặc trưng: Lớp thực thể chỉ chứa các thuộc tính và các phương thức get/set cho mỗi thuộctính (còn gọi là các lớp thực thể thuần) Các thao tác liên quan đến dữ liệu đều đặt trong lớp điều khiển.Ví dụ: Chương trình thực hiện các phép tính với 2 số nguyên .Chức năng tính toán của Caculator theo MVC cải tiến: Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bịclick thì lớp View bắt sự kiện ,cập nhật dữ liệu ở Model rồi truyền dữ liệu này choControl. Trên lớp Control thực hiện thao tác tính toán . View hiển thị kết quả tính toán đã thực hiện ở Control12Tìm hiểu mô hình MVC trong javaHình 3. Sơ đồ dùng thực thể thuần1.1.Xây dựng Modelpublic class Caculator {private long a, b;private char toantu;public Caculator() {public Caculator(int a, int b, char toantu) {this.a = a;this.b = b;this.toantu = toantu;public long getA() {13Tìm hiểu mô hình MVC trong javareturn a;public long getB() {return b;public char getToantu() {return toantu;public void setA(long a) {this.a = a;public void setB(long b) {this.b = b;public void setToantu(char c) {this.toantu =c;1.2.Xây dựng Viewpublic class View extends JFrame implements ActionListener{public View(){initComponents();private JButton cong, tru, nhan, chia;private JLabel soa, sob, kqua;private JTextField ain, bin, res;private JPanel panel1 = new JPanel();14Tìm hiểu mô hình MVC trong javaprivate void initComponents(){cong = new JButton(” Tổng “); cong.setSize(4, 15);tru = new JButton(” Hiệu “); tru.setSize(15, 15);nhan = new JButton(” Tích “); nhan.setSize(4, 15);chia = new JButton(“Thương”); chia.setSize(4, 15);cong.addActionListener(this);tru.addActionListener(this);nhan.addActionListener(this);chia.addActionListener(this);soa = new JLabel(“Nhập số a:”);sob = new JLabel(“Nhập số b:”);kqua = new JLabel(“Kết quả:”);ain = new JTextField(10);bin = new JTextField(10);res = new JTextField(10);panel1.add(soa); panel1.add(ain);panel1.add(sob); panel1.add(bin);panel1.add(kqua); panel1.add(res);panel1.add(cong); panel1.add(tru);panel1.add(nhan); panel1.add(chia);setSize(222,243);setContentPane(panel1);getContentPane().setLayout(new FlowLayout(2,10,10));setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);public void actionPerformed(ActionEvent ae) {try{Object bam = ae.getSource();Caculator cal=new Caculator();cal.setA(Long.parseLong(ain.getText()));cal.setB(Long.parseLong(bin.getText()));if(bam == cong) cal.setToantu(‘+’);if(bam == tru) cal.setToantu(‘-‘);if(bam == nhan) cal.setToantu(‘*’);if(bam == chia){if(Long.parseLong(bin.getText())== 0) throw new ABCException();cal.setToantu(‘/’);Control con=new Control();15Tìm hiểu mô hình MVC trong javares.setText(con.tinhtoan(cal)+” “);}catch(Exception e){JOptionPane.showMessageDialog(null, “Nhap loi!”);1.3.Xây dựng Controlpublic class Control {public Control() {public long tinhtoan(Caculator cal) {switch (cal.getToantu()) {case ‘+’:return (cal.getA() + cal.getB());case ‘-‘:return (cal.getA() – cal.getB());case ‘*’:return (cal.getA() * cal.getB());case ‘/’:return (cal.getA() / cal.getB());return 0;1.4. Hàm mainpublic class MAIN {public static void main(String[] args) {View view=new View();view.setVisible(true);2. Mô hình MVC với thực thể bean-Đặc trưng: Lớp thực thể chứa các thuộc tính và các phương thức get/set cho mỗi thuộc tính,và các thao tác liên quan đến dữ liệu mà liên quan đến lớp thực thể nào thì đềuđặt trong lớp điều khiển đó. Các lớp thực thể kiểu này được gọi là lớp bean.16Tìm hiểu mô hình MVC trong java Trong nhiều trường hợp, không còn cần đến lớp điều khiển nữa vì lớp bean đãkiêm luôn vai trò của lớp điều khiểnVí dụ: Chương trình thực hiện các phép tính với 2 số nguyên .Chức năng tính toán của Caculator theo MVC với thực thể bean: Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bịclick thì lớp View sẽ xử lý sự kiện ,trong đó gọi đến thao tác tính toán trong lớpCaculator, sau đó View sẽ hiện thị kết quả.Hình 4. Sơ đồ17Tìm hiểu mô hình MVC trong java2.1. Xây dựng Modelpublic class Caculator {private long a, b;private char toantu;public Caculator() {public Caculator(int a, int b, char toantu) {this.a = a;this.b = b;this.toantu = toantu;public long getA() {return a;public long getB() {return b;public char getToantu() {return toantu;public void setA(long a) {this.a = a;18Tìm hiểu mô hình MVC trong javapublic void setB(long b) {this.b = b;public void setToantu(char c) {this.toantu =c;public long tinhtoan(){switch(toantu){case ‘+’: return (a + b);case ‘-‘: return (a – b);case ‘*’: return (a * b);case ‘/’: return (a / b);return 0;2.2.Xây dựng viewpublic class View extends JFrame implements ActionListener{public View(){initComponents();private JButton cong, tru, nhan, chia;private JLabel soa, sob, kqua;private JTextField ain, bin, res;private JPanel panel1 = new JPanel();private void initComponents(){cong = new JButton(” Tổng “); cong.setSize(4, 15);tru = new JButton(” Hiệu “); tru.setSize(15, 15);nhan = new JButton(” Tích “); nhan.setSize(4, 15);chia = new JButton(“Thương”); chia.setSize(4, 15);19Tìm hiểu mô hình MVC trong javacong.addActionListener(this);tru.addActionListener(this);nhan.addActionListener(this);chia.addActionListener(this);soa = new JLabel(“Nhập số a:”);sob = new JLabel(“Nhập số b:”);kqua = new JLabel(“Kết quả:”);ain = new JTextField(10);bin = new JTextField(10);res = new JTextField(10);panel1.add(soa); panel1.add(ain);panel1.add(sob); panel1.add(bin);panel1.add(kqua); panel1.add(res);panel1.add(cong); panel1.add(tru);panel1.add(nhan); panel1.add(chia);setSize(222,243);setContentPane(panel1);getContentPane().setLayout(new FlowLayout(2,10,10));setVisible(true);setDefaultCloseOperation(EXIT_ON_CLOSE);public void actionPerformed(ActionEvent ae) {try{Object bam = ae.getSource();Caculator cal=new Caculator();cal.setA(Long.parseLong(ain.getText()));cal.setB(Long.parseLong(bin.getText()));if(bam == cong) cal.setToantu(‘+’);if(bam == tru) cal.setToantu(‘-‘);if(bam == nhan) cal.setToantu(‘*’);if(bam == chia){if(Long.parseLong(bin.getText())== 0) throw new ABCException();cal.setToantu(‘/’);res.setText(cal.tinhtoan()+” “);}catch(Exception e){JOptionPane.showMessageDialog(null, “Nhap loi!”);20Tìm hiểu mô hình MVC trong java2.3.Hàm Mainpublic class MAIN {public static void main(String[] args) {View view=new View();view.setVisible(true);3. Mô hình MVC cải tiến- Đặc trưng: Lớp thực thể thuần Các thao tác liên quan đến CSDL đều đặt trong lớp điều khiểnCác lớp điều khiển giành quyền điều khiển toàn bộ các lớp view và controlVí dụ: Chương trình thực hiện các phép tính với 2 số nguyên .Chức năng tính toán của Caculator theo MVC cải tiến: Khi nút tổng, hiệu, tích hoặc thương trên form của lớp View bịclick thì lớp View này không được xử lí gì mà phải truyền sự kiện này xuống cho lớpđiều khiển (Control) Để làm được việc này, trên lớp View có phương thức truyền quyền điều khiểncho lớp điều khiển, và trong lớp điều khiển có một lớp nội tại (inner class) dùngđể nhận sự kiện do lớp biên truyền xuống để xử lý.21Tìm hiểu mô hình MVC trong javaHình5. Sơ đồ3.1.Xây dựng Modelpublic class Caculator {private long a, b;public Caculator() {public Caculator(long a, long b) {this.a = a;this.b = b;22Tìm hiểu mô hình MVC trong javapublic long getA() {return a;public void setA(long a) {this.a = a;public long getB() {return b;public void setB(long b) {this.b = b;3.2.Xây dựng Viewpublic class View extends JFrame implements ActionListener{public View(){initComponents();public JButton getCong() {return cong;public JButton getTru() {return tru;23Tìm hiểu mô hình MVC trong javapublic JButton getNhan() {return nhan;public JButton getChia() {return chia;private JButton cong, tru, nhan, chia;private JLabel soa, sob, kqua;private JTextField ain, bin, res;private JPanel panel1 = new JPanel();private void initComponents(){cong = new JButton(” Tổng “); cong.setSize(4, 15);tru = new JButton(” Hiệu “); tru.setSize(15, 15);nhan = new JButton(” Tích “); nhan.setSize(4, 15);chia = new JButton(“Thương”); chia.setSize(4, 15);soa = new JLabel(“Nhập số a:”);sob = new JLabel(“Nhập số b:”);kqua = new JLabel(“Kết quả:”);ain = new JTextField(10);bin = new JTextField(10);res = new JTextField(10);panel1.add(soa); panel1.add(ain);panel1.add(sob); panel1.add(bin);panel1.add(kqua); panel1.add(res);24Tìm hiểu mô hình MVC trong javapanel1.add(cong); panel1.add(tru);panel1.add(nhan); panel1.add(chia);setSize(222,243);setContentPane(panel1);getContentPane().setLayout(new FlowLayout(2,10,10));public Caculator getCaculator(){Caculator cal=new Caculator();try{cal.setA(Long.parseLong(ain.getText()));cal.setB(Long.parseLong(bin.getText()));}catch(Exception e){JOptionPane.showMessageDialog(null, “Nhap loi!”);return cal;public void addkq(String kq){res.setText(kq);public void addButtonAddListener(ActionListener ac) {cong.addActionListener(ac);tru.addActionListener(ac);nhan.addActionListener(ac);chia.addActionListener(ac);25