So sánh mô hình mvc với mô hình 3 lớp

Chuyện là em định nghiên cứu và ôn tập kỹ trước khi nộp hồ sơ xin việc ạ. Lúc còn đi học em có thực hiện một đồ án sử dụng mô hình 3 layer để xây dựng chương trình, vì thế khi nghe MVC thì em thắc mắc không biết điểm giống, khác nhau, ưu nhược điểm của 2 mô hình này khi áp dụng ngoài thực tế như thế nào ạ? Đây là những gì em search được.

Điểm giống nhau - Cả hai đều là mô hình kiến trúc áp dụng trong lập trình được tách thành 3 thành phần. - Tách biệt sự phụ thuộc giữa ngôn ngữ lập trình, môi trường phát triển, xử lý logic. - Các thành phần ở mỗi mô hình có nhiều điểm tương đồng như Presentation Layer và View... - ... Điểm khác biệt - Khác biệt rõ nhất là cách xử lý yêu cầu [workflow] của 2 mô hình. - Ở MVC, thành phần Model giữ chức năng của cả lớp Business và Data Access trong mô hình 3 Layer.

- 3 Layer thường được sử dụng trong lập trình ứng dụng, trong khi đó MVC được ưu chuộng nhiều trong lập trình website vì tính linh hoạt và không bắt buộc các DTO như 3-Layer

Ngoài ra mong các cao nhân cho cho em xin tí thông tin về SOA, Muti-tier, em thấy ít người viết bài so sánh về 2 mô hình này ạ. Em không biết những thông tin này có thực sự chính xác hay không nên lập topic này hy vọng mọi người có thể chia sẻ kiến thức hiểu biết của mình về 4 mô hình.

Vô cùng cảm ơn các cao nhân.

p/s: Em có post sai chỗ mong ad move sang chỗ đúng dùm e ạ, Thanks ad!.

MVC is a buzzword for Model View Control. A 3 functional layers for SW design. In plain English:
- Model: First one figures out what "form" or Model an App or Software should be. Example: a Chat model.
- View: Then one creates a view how the Chat model looks like [here: GUI layouts, etc.]
- Control: Finally one checks for the model: a] Is it "exactly" the model one intends to materialize? YES: MVC is complete. NO: Back to Model b] Is it "totally" different to the model one wants to have? YES: Back to Model NO: Back to View

MVC is an endless Triangle between Design-Development-Test

SOA - Services Oriented Architecture, again a Buzzword and it means: [Software] Services depend on Organization. Example: A retailer needs less services than a warehouse. A retailer does not need complex software [e.g. SAP software], nor big Database, nor Cloud Computing because his shop is local and static [i.e. invariable] while a warehouse has more wares and different sale locations. Also, a warehouse needs complex logistics, accounting software [SAP], big Database, Network, etc. SOA shop gives its clients exactly what they want or need. Or in other words: SOA tailors the needs of its clients. Another example: This CongdongJava forum is a tiny org set up by Tranhuy. His org is virtually in Vietnam and Vietnamese. Digital Ocean is the "SOA" shop that tailors the need of Tranhuy and gives him what he needs: A DNS domain, a server and some infrastructure [e.g. maintenance, etc.]. By the way, SOA can be "misunderstood" as "Son Of Anarchy" [click HERE for fun]. This pic here displays how a SOA looks like


Multi-tier: Old buzzword and it means literally "multiple" stage [= tier]. It's like a stairs


every stage is a level, many stages = many levels. In SW term it's the different stages of processing or application. Client-Server is for example a 2-tier application. Or 3-tier Architecture like this

Reactions: dangxunb and Kizzol

Unknown 31/07/2012 Kiến thức IT , Lập trình Edit

Difference between MVC and 3 Layer model.Bài viết này chúng ta sẽ cùng tìm hiểu về sự khác biệt giữa 2 mô hình lập trình này. Tại sao chúng ta cần phân biệt chúng?? Vì đây là 2 mô hình khá phổ biến trong lập trình [ở thời điểm này] và chúng có khá nhiều điểm giống nhau.Trước khi phân biệt, chúng ta cần tìm hiểu mô hình MVC là gì, 3 Layer là gì??
  • Mô hình 3 lớp - Three Layer #bllink
  • Tìm hiểu mô hình MVC là gì? #bllink

#bl0 Điểm giống nhau- Cả hai đều là mô hình kiến trúc áp dụng trong lập trình được tách thành 3 thành phần.- Tách biệt sự phụ thuộc giữa ngôn ngữ lập trình, môi trường phát triển, xử lý logic.- Các thành phần ở mỗi mô hình có nhiều điểm tương đồng như Presentation Layer và View...- ...

#bl0 Điểm khác biệt

- Khác biệt rõ nhất là cách xử lý yêu cầu [workflow] của 2 mô hình [Tham khảo cách làm việc của 2 mô hình].- Ở MVC, thành phần Model giữ chức năng của cả lớp Business và Data Access trong mô hình 3 Layer.

- 3 Layer thường được sử dụng trong lập trình ứng dụng, trong khi đó MVC được ưu chuộng nhiều trong lập trình website vì tính linh hoạt và không bắt buộc các DTO như 3-Layer @hoi.#bl2 Trên đây là ý kiếm của s, các bạn hãy cùng góp ý nhé.

Cùng SaliproIT Blog chia sẻ Thế giới công nghệ 4 sao

“Biết địch biết ta, trăm trận trăm thắng “. Vậy muốn biết có gì hay thì phải hiểu rõ về nó. Được rồi, nhân dịp đang học nhập môn công nghệ phần mềm ở trường, kiến thức còn nóng hổi nên mình sẽ phân tích về mô hình 3 lớp [3-layer].

Trước tiên, cần phân biệt 2 khái niệm tầng [tier] và lớp [layer]

3-tiers là một kiến trúc kiểu client/server mà trong đó giao diện người dùng [UI-user interface], các quy tắc xử lý [BR-business rule hay BL-business logic], và việc lưu trữ dữ liệu được phát triển như những module độc lập, và hầu hết là được duy trì trên các nền tảng độc lập, và mô hình 3 tầng [3-tiers] được coi là một kiến trúc phần mềm và là một mẫu thiết kế.” [dịch lại từ wikipedia tiếng Anh].

Đây là kiến trúc triển khai ứng dụng ở mức vật lý. Kiến trúc gồm 3 module chính và riêng biệt :

  • Tầng Presentation: hiển thị các thành phần giao diện để tương tác với người dùng như tiếp nhận thông tin, thông báo lỗi, …
  • Tầng Business Logic: thực hiện các hành động nghiệp vụ của phần mềm như tính toán, đánh giá tính hợp lệ của thông tin, … Tầng này còn di chuyển, xử lí thông tin giữa 2 tầng trên dưới.
  • Tầng Data: nơi lưu trữ và trích xuất dữ liệu từ các hệ quản trị CSDL hay các file trong hệ thống. Cho phép tầng Business logic thực hiện các truy vấn dữ liệu .

Mọi người vẫn hay nhầm lẫn giữa tier và layer vì cấu trúc phân chia giống nhau [presentation, bussiness , data]. Tuy nhiên, thực tế chúng hoàn toàn khác nhau. Nếu 3 tiers có tính vật lí thì 3 layer có tính logic. Nghĩa là ta phân chia ứng dụng thành các phần [các lớp] theo chức năng hoặc vai trò một cách logic. Các layer khác nhau được thực thi trong 1 phân vùng bộ nhớ của process. Vì thế nên một tier có thể có nhiều layer.

  Lập trình bất đồng bộ trong C#

Mô hình 3-layer gồm có 3 phần chính :

Presentation Layer [GUI] : Lớp này có nhiệm vụ chính giao tiếp với người dùng. Nó gồm các thành phần giao diện [ win form, web form,…] và thực hiện các công việc như nhập liệu, hiển thị dữ liêu, kiểm tra tính đúng đắn dữ liệu trước khi gọi lớp Business Logic Layer [BLL].

Business Logic Layer [BLL] : Layer này phân ra 2 thành nhiệm vụ :

  • Đây là nơi đáp ứng các yêu cầu thao tác dữ liệu của GUI layer, xử lý chính nguồn dữ liệu từ Presentation Layer trước khi truyền xuống Data Access Layer và lưu xuống hệ quản trị CSDL.
  • Đây còn là nơi kiểm tra các ràng buộc, tính toàn vẹn và hợp lệ dữ liệu, thực hiện tính toán và xử lý các yêu cầu nghiệp vụ, trước khi trả kết quả về Presentation Layer.

Data Access Layer [DAL] : Lớp này có chức năng giao tiếp với hệ quản trị CSDL như thực hiện các công việc liên quan đến lưu trữ và truy vấn dữ liệu [ tìm kiếm, thêm, xóa, sửa,…].

  • Việc phân chia thành từng lớp giúp cho code được tường minh hơn. Nhờ vào việc chia ra từng lớp đảm nhận các chức năng khác nhau và riêng biệt như giao diện, xử lý, truy vấn thay vì để tất cả lại một chỗ. Nhằm giảm sự kết dính.
  • Dễ bảo trì khi được phân chia, thì một thành phần của hệ thống sẽ dễ thay đổi. Việc thay đổi này có thể được cô lập trong 1 lớp, hoặc ảnh hưởng đến lớp gần nhất mà không ảnh hưởng đến cả chương trình.
  • Dễ phát triển, tái sử dụng: khi chúng ta muốn thêm một chức năng nào đó thì việc lập trình theo một mô hình sẽ dễ dàng hơn vì chúng ta đã có chuẩn để tuân theo. Và việc sử dụng lại  khi có sự thay đổi giữa hai môi trường [ Winform sang Webfrom ] thì chỉ việc thay đổi lại lớp GUI.
  • Dễ bàn giao. Nếu mọi người đều theo một quy chuẩn đã được định sẵn, thì công việc bàn giao, tương tác với nhau sẽ dễ dàng hơn và tiết kiệm được nhiều thời gian.
  • Dễ phân phối khối lượng công việc. Mỗi một nhóm, một bộ phận sẽ nhận một nhiệm vụ trong mô hình 3 lớp. Việc phân chia rõ ràng như thế sẽ giúp các lập trình viên kiểm soát được khối lượng công việc của mình.

Phân tích chi tiết từng layer trong mô hình 3 lớp. 

Có hai thành phần chính sau đây với những tác vụ cụ thể :

  • UI Components : gồm các thành phần tạo nên giao diện của ứng dụng [GUI]. Chúng chịu trách nhiệm thu nhận và hiển thị dữ liệu cho người dùng… Ví dụ : textbox, button, combobox, …
  • UI Process Components : là thành phần chịu trách nhiệm quản lý các quá trình chuyển đổi giữa các UI… Ví dụ : Sắp xếp quá trình kiểm tra thông tin khách hàng:

1.Hiển thị màn hình tra cứu ID

2.Hiển thị màn hình thông tin chi tiết khách hàng tương ứng

3.Hiển thị màn hình liên lạc với khách hàng.

Lớp này gồm 4 thành phần:

  • Service Interface : là thành phần giao diện lập trình mà lớp này cung cấp cho lớp Presentation sử dụng.
  • Bussiness Workflows : chịu trách nhiệm xác định và điều phối các quy trình nghiệp vụ gồm nhiều bước và kéo dài. Những quy trình này phải được sắp xếp và thực hiện theo một thứ tự chính xác.
  • Ví dụ : Thực hiện mua một đơn hàng trên tiki qua nhiều bước : kiểm tra gói hàng còn không?, tính tổng chi phí, cho phép giao dịch và sắp xếp việc giao hàng.
  • Bussiness Components : chịu trách nhiệm kiểm tra các quy tắc nghiệp vụ, ràng buộc logic và thực hiện các công việc . Các thành phần này cũng thực hiện các dịch vụ mà Service Interface cung cấp và Business Workflows sẽ sử dụng nó.
  • Ví dụ : Tiếp tục ví dụ ở trên. Bạn sẽ cần một Bussiness Component để kiểm tra gói hàng có khả dụng không ? hay một component để tính tổng chi phí,…
  • Bussiness Entities : thường được sử dụng như Data Transfer Objects [ DTO ] . Bạn có thể sử dụng để truyền dữ liệu giữa các lớp [Presentation và Data Layer]. Chúng thường là cấu trúc dữ liệu [ DataSets, XML,… ] hay các lớp đối tượng đã được tùy chỉnh.
  • Ví dụ : tạo 1 class Student lưu trữ các dữ liệu về tên, ngày sinh, ID, lớp.

  • Data Access Logic Components : chịu trách nhiệm chính lưu trữ và truy xuất dữ liệu từ các nguồn dữ liệu [Data Sources] như XML, file system,… Hơn nữa còn tạo thuận lợi cho việc dễ cấu hình và bảo trì.
  •  Service Agents : giúp bạn gọi và tương tác với các dịch vụ từ bên ngoài một cách dễ dàng và đơn giản.

Để hiểu rõ hơn về cấu trúc và cách xây dựng của mô hình 3 lớp, chúng ta cùng tham khảo một ví dụ về mô hình quản lí công nhân gồm các lớp BUS, DAO, GUI. [Các đoạn code sẽ bị lược bỏ bớt ]

Đầu tiên là GUI gồm các button insert, update, reset ,delete ,exit .Người dùng sẽ giao tiếp với màn hình giao diện này

Lớp DTO, đây không phải là layer, đây chỉ là 1 gói dữ liệu đươc trao đổi giữa các lớp. Gói dữ liệu này được xây dựng dưới dạng lớp đối tượng. Mỗi một công nhân sẽ mang những thuộc tính sau:

namespace DTO { public class EmployeeDTO { #region Atrributes private String _employeeID; private String _name; private String _email; private float _salary; private int _employeeStyle; #endregion //.....

Các nghiệp vụ xử lý chính sẽ được đặt ở lớp BUS [hay là BLL]  gồm các nghiệp vụ insert, update, delete, retrieve

namespace BUS { public class EmployeeBUS { #region 1. Inserting public static bool InsertEmployee[EmployeeDTO emp] { if [EmployeeDAO.CheckEmployeeByID[emp.EmployeeID]==true &&EmployeeStyleDAO.CheckEmployeeStyleByID[emp.EmployeeStyle]==false] { return false; } return EmployeeDAO.InsertEmployee[emp]; } #endregion//techtalk.vn/wp-admin/post-new.php# //2. Updating //3. Deleting //4. Retrieving } }

Và cuối cùng là lớp DAO [ hay là DAL ]. Truy  vấn đến cơ sở dữ liệu

{ public class EmployeeDAO { #region 1. Inserting public static bool InsertEmployee[EmployeeDTO emp] { bool result=false; try { // Create List Sql Parameter List sqlParams = new List[]; sqlParams.Add[new SqlParameter["@EmployeeID", emp.EmployeeID]]; sqlParams.Add[new SqlParameter["@Name", emp.Name]]; sqlParams.Add[new SqlParameter["@Email", emp.Email]]; sqlParams.Add[new SqlParameter["@Salary", emp.Salary]]; sqlParams.Add[new SqlParameter["@EmployeeStyle", emp.EmployeeStyle]]; // Call Store Procedure int n = SqlDataAccessHelper.ExecuteNoneQuery["spInsertEmployee", sqlParams]; if [n == 1] result = true; } catch [Exception ex] { throw ex; } return result; } #endregion // 2. Updating // 3. Deleting // 4. Retrieving

Vì đây là ví dụ mô phỏng nên tôi chỉ chú trọng đến cách cấu trúc một chương trình sử dụng mô hình 3 lớp. Cảm ơn đã đọc hết.

Đừng bỏ lỡ những bài viết hay về lập trình hướng đối tượng:

Xem thêm việc làm Web Developer mới nhất tại TopDev

TopDev via huatrung

  Lập trình bất đồng bộ trong C#

Video liên quan

Chủ Đề