Không có cái hay tuyệt đối. Tương tự về sự dễ cũng vậy.
Trong MVP, điểm tiếp nhận request/event là View. View delegate cho
Presenter (hay code behind). Vậy nên đây là kiến trúc hướng giao diện,
hướng trang.
Với M$, họ mạnh về tooling cho nên họ có xu hướng đi theo MVP để giúp
developer tận dụng công cụ của bộ Visual Studio sinh ra giao diện.
Để tận dụng được điểm mạnh của MVP, M$ định nghĩa hàng tá các tag soup
mà
VS.NET hiểu được nhằm giúp developer kéo thả giao diện, thay đổi
properties. Bằng cách đó, họ cho là tốc độ làm việc của developer được
cải thiện. Tuy vậy, nhìn ở góc độ chất lượng sinh trang thì
VS.NET
giúp sinh ra các trang có chất lượng rất thấp và cực kì kém hiệu quả
nếu như không có sự can thiệp bằng tay từ các lập trình viên có kinh
nghiệm. Đây là một tradeoff.
Việc xây dựng giao diện phụ thuộc vào công cụ và hướng vào việc nhanh
chóng có được các thành phần của trang rời rạc sẽ làm tăng tính phức
tạp khi số lượng trang bắt đầu lớn. Số code bị duplicate ở mức độ lớn
tăng lên là không thể tránh khỏi. Chưa kể là tầng CSS là không thể bảo
trì
Điểm yếu tiếp của MVP là rất khó test web form do web form là một phần
của trang và chỉ có thể xuất hiện khi có sự kiện trên trang đó. Tiếp
đến là sự dính liền giữa logic xử lý sự kiện về logic giao diện của
từng trang. Do vậy nó khuyến khích một thứ tư duy thiếu tính modular
việc định hình kiến trúc ứng dụng. Đây là điểm yếu của
ASP.NET truyền
thống (
ASP.NET cũng đã có bản MVC hỗ trợ trong namespace
System.Web.Mvc --> cái tên ugly kinh dị - đúng kiểu của bác Johnson
nhà Spring).
Điểm mạnh của MVP là giúp giúp vendor hóa các UI control. Các lập
trình viên có thể đóng gói phần tag soup và code behind của nó và phân
phối lại. Trên thực tế, các UI như vậy chỉ cần thiết khi mà UI đó dùng
thật nhiều Javascript. Nhưng điều đó cũng có nghĩa là khi ứng dụng
được xây dựng bằng cách lắp ghép thì không ai đảm bảo được chất lượng,
độ nhất quán và tính tối ưu. Sẽ có rất nhiều cách code, cách sinh
trang và sự lặp lại là không thể tránh khỏi.
Đây là một ví dụ:
http://travel.channelvn.net/home.chn --> hết sức
thận trọng khi dùng
ASP.NET cho các site có tiềm năng trở thành cỡ
lớn.
MVP và
ASP.NET sẽ có lợi thế trong các team nhỏ, hỗ trợ tool tốt và đa
kĩ năng.
Martin đã kill khái niệm MVP từ năm 2006. Vậy nên có thể gọi mô hình
của
ASP.NET truyền thống và JSF là MVSC (supervising controller). Cả
hai thằng này tớ đều ghét: một thằng thì postback-oriented thằng kia
thì POST-oriented.
Với MVC thì request gửi đến controller, controller này sẽ quyết định
trang nào hiện ra. Sự tách biệt giữa Model, View và Controller là đậm
nét giúp việc phân công công việc tốt hơn (thích hợp với các team lớn,
đa dạng hóa về kĩ năng), dễ test độc lập các thành phần. Việc
controller xử lý View cũng sẽ giúp lập trình quản lý được ứng dụng tốt
hơn về workflow, hay tất cả các khía cạnh khác của aplication trước
khi sinh trang. MVC cũng hỗ trợ TDD (hoặc ít nhất là unit testing) tốt
hơn.
Tuy nhiên có rất nhiều các biến thể của MVP và MVC bên ngoài kia. Đánh
giá điểm yếu mạnh của chúng thì mất khá nhiều thời gian :D
> >
http://pieceofcakephp.files.wordpress.com/2006/11/routing_logical_vie...
> >
http://www.symfony-project.org/blog/2008/06/23/the-symfony-1-1-archit...