1.Tổng quan về Mô hình MVC. 1.1. Xuất xứ 1.2. Kiến trúc 1.3. ưu ,nhược điểm2.Cách xây dựng hệ thống theo mô hình MVC với 3 cấu trúc( Có ví dụ minh họa): 2.1.Mô hình MVC với thực thể thuần 2.1.Mô hình MVC với thực thể bean 2.3.Mô hình MVC cải tiến
Trang 1ĐỀ 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 _D12CN1Nguyễn Thị Bình An _D12CN1Phạm Thị Diễm_D12CN4
Hà Nội- 2014
Trang 21
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
Trang 4I 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 đố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ăm
1988
2 Kiến trúc MVC
Hình1.Kiến trúc MVC
Trang 52.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à:
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ế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ượ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
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ậpthông tin từ phía người dùng
Trang 6o 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
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ụ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à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á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
CD/DVD trên truyền hình của nhà A
A
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 Abắt buộc phải sử dụng remote control – điều khiển từ xa
Trang 7• Như vậy, chúng ta sẽ nhận thấy cách thức A xem phim như sau
đó 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ẽ sau
Hình 2.Mô hình MVC khi A xem phim
cần thiết, nghĩa là đầu máy đóng vai trò là Model
Trang 8o 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.
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ớ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
thay đổi không ảnh hưởng gì đến toàn hệ thống
không ảnh hưởng gì lớn
phân chia công việc và các xử lý công việc
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ó
Trang 92.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ượ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 theo
o 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ệt
dữ 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á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 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, remote
có 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ấ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
Trang 103.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ú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ù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ệ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 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áchbiệt và khái niệm cho từng loại thành phần riêng biệt
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
Trang 11 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úng
sẽ có phiên bản chung
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à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 View
có khả năng cắm vào trong smalltalk MVC
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ớiGUI MVC hơn là web MVC
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ể
Trang 12 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 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 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
Trang 14private JButton cong, tru, nhan, chia;
private JLabel soa, sob, kqua;
private JTextField ain, bin, res;
private JPanel panel1 = new JPanel();
Trang 15private 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);
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('*');
Trang 16res.setText(con.tinhtoan(cal)+" ");
public class MAIN {
public static void main(String[] args) {
View view=new View();
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