Mô hình 3-layers, 3-tiers trong lập trình quản lý .Net

Mô hình 3-layers, 3-tiers trong lập trình quản lý .Net

Sau 1 thời gian tìm hiểu và cũng có rất nhiều câu hỏi, mình xin phép giới thiệu lại mô hình này, mong các bạn góp ý để bài viết hoàn thiện hơn!

Mô hình 3-layers, 3-tiers trong lập trình quản lý .Net

Trích dẫn: Mô hình 3 tầng (3-tiers architecture) là gì, mô hình 3 lớp (3-layers architecture) là gì, sự khác biệt giữa 3-layer và 3-tiers, nó có ý nghĩa như thế nào và tại sao ta phải dùng mô hình 3-layers để viết theo mô hình này trong ứng dụng quản lý .NET?

Chào các bạn, câu hỏi trên cũng chính là nội dung mà tôi sẽ trình bày trong chủ đề này: "Mô hình 3-layers, 3-tiers và ứng dụng của nó trong lập trình quản lý .Net"

Để trả lời câu hỏi trên, tôi sẽ trình bày 1 số lợi ít có được khi bạn tìm hiểu và sử dụng mô hình này:

- Khi ứng dụng đòi hỏi có sự tách biệt 3 phần: giao diện, xử lý nghiệp vụ, giao tiếp với hệ quản trị CSDL để người viết có thể dễ dàng quản lý ứng dụng của mình khi có bug xảy ra với 1 số thành phần xử lý nghiệp vụ không mong muốn. Ngoài ra với mô hình này nó còn tạo ra 1 không gian làm việc rất tốt để người thiết kế giao diện, lẫn người lập trình có thể làm việc chung với nhau 1 cách dễ dàng.

- Khả năng tái tạo cao: Khi ứng dụng bất chợt yêu cầu thay đổi hệ quản trị CSDL hoặc chuyển ứng dụng từ window application sang web application, việc xây dựng lại ứng dụng từ đầu rất tốn nhiều thời gian và chi phí. Vì vậy với mô hình này ra đời sẽ giải quyết vấn đề này.

1. Mô hình 3 tầng (3-tiers) là gì?

Theo wikipedia:

Trích dẫn: “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).

3-Tiers có tính vật lý (physical): là mô hình client-server (mỗi tier có thể đặt chung 1 nơi hoặc nhiều nơi, kết nối với nhau qua Web services, WCF, Remoting...). Như hình vẽ ta thấy 3 tầng rõ rệt 3 tầng:

+ Presentation tier bao gồm các thành phần phần xử lý giao diện Graphic User Interface (GUI)
+ Business tier gồm các thành phần Business Logic Layer (BLL), Data Access Layer (DAL) và Data Tranfer Object (DTO): xem thêm phần 3-layers
+ Data tier lưu trữ dữ liệu, là các hệ quản trị CSDL như MS SQL Server, Oracle, SQLite, MS Access, XML files, text files,...

Tuy nhiên bạn cần chú ý những ưu và nhược điểm sau đây để áp dụng nó một cách đúng đắn.

Ưu điểm:

- Dễ dàng mở rộng, thay đổi quy mô của hệ thống: Khi cần tải lớn, người quản trị có thể dễ dàng thêm các máy chủ vào nhóm, hoặc lấy bớt ra trong trường hợp ngược lại.

Nhược điểm:

- Việc truyền dữ liệu giữa các tầng sẽ chậm hơn vì phải truyền giữa các tiến trình khác nhau (IPC), dữ liệu cần phải được đóng gói -> truyền đi -> mở gói trước khi có thể dùng được.

- Việc phát triển ứng dụng phức tạp hơn.

2. Mô hình 3 lớp (3-layers) là gì?

Không như 3-Tiers có tính vật lý, 3-Layers có tính logic (mỗi layer có 1 công việc) và là 1 thành phần của 3-Tiers. Gồm 3 lớp chính:
+ Graphic User Interface (GUI): Thành phần giao diện, là các form của chương trình tương tác với người sử dụng.
+ Business Logic Layer (BLL): Xử lý các nghiệp vụ của chương trình như tính toán, xử lý hợp lệ và toàn vẹn về mặt dữ liệu.
+ Data Access Layer (DAL): Tầng giao tiếp với các hệ quản trị CSDL

Trong 1 số trường hợp vì lượng thông tin gởi nhiều ta có thể dùng Data Tranfer Object (DTO) để chuyển đối tượng hoặc danh sách đối tượng giữa các tầng với nhau cho tiện dụng.

Theo như hình vẽ: mô tả sự hoạt động của mô hình 3-layer gồm 2 tiến trình sau:

Các đường mũi tên màu cam biểu diễn cho 1 tiến trình giao tiếp từ GUI đến Data Acess Layer:

- (1) Người sử dụng tác động lên GUI yêu cầu hiển thị thông tin lên màn hình. Tại đây GUI sẽ kiểm tra yêu cầu của người dùng nhập có hợp lệ hay không, nếu không hợp lệ sẽ thông báo cho người dùng.

- Ngược lại yêu cầu sẽ được gởi trực tiếp đến BLL (2) hoặc thông qua lớp object DTO hỗ trợ luân chuyển (2.1 & 2.2), tại đây BLL sẽ xử lý nghiệp vụ về yêu cầu của người dùng, nếu yêu cầu không hợp lệ hoặc tự xử lý yêu cầu không cần phải truy vấn thì BLL sẽ gởi thông tin về GUI (3) và GUI sẽ hiển thị kết quả cho người dùng.

- Trong trường hợp BLL cần thao tác trên dữ liệu từ CSDL thì BLL sẽ gởi yêu cầu đến trực tiếp đến DAL (4) hoặc thông qua DTO (4.1 & 4.2), nhờ DAL giao tiếp với hệ quản trị CSDL (5) lấy hoặc thêm, xóa, sửa dữ liệu.

- DAL sẽ giao tiếp hệ quản trị CSDL (5) với các truy vấn (sử dụng công nghệ ADO, LINQ to SQL, NHibernate, Entity Framework)

Tại đây tiếp tục thực hiện tiến trình thứ 2 được biểu diễn bằng các mũi tên màu xanh:

- Sau khi DAL thực hiện giao tiếp, hệ quản trị CSDL sẽ trả kết quả truy vấn về DAL (7), DAL sẽ gởi thông tin về dữ liệu vừa lấy trực tiếp sang BLL (8) hoặc thông qua DTO (8.1 & 8.2) xử lý tiếp nghiệp vụ với yêu cầu đã gởi từ trước, sau khi xử lý xong nghiệp vụ, BLL sẽ gởi thông tin đến GUI (10), GUI sẽ hiển thị thông báo và kết quả yêu cầu lên màn hình.

VD: Mô tả hoạt động của mô hình 3-layer với ứng dụng liệt kê danh sách điểm sinh viên:

Từ màn hình form quản lý sinh viên gồm có 1 combobox chọn lớp, 1 gridview để hiển thị danh sách sinh viên và 1 button để thực hiện lệnh liệt kê danh sách.
(1) Người dùng chọn combobox lớp trên GUI và ấn button liệt kê
(2) GUI kiểm tra yêu cầu chọn combobox hợp lệ và gởi mã lớp (**) vừa chọn sang BUS xử lý yêu cầu hiển thị danh sách điểm sinh viên
(4) Tại BUS vì yêu cầu từ GUI khá đơn giản nên BUS sẽ không xử lý gì mà sẽ gởi mã lớp sang DAL lấy danh sách điểm.
(5) Tại DAL sau khi đã nhận được yêu cầu lấy danh sách điểm từ mã lớp, DAL sẽ tương tác với hệ quản trị CSDL (6) qua các lệnh mở tập tin, kết nối, truy vấn,… để lấy được danh sách điểm (7) với mã số yêu cầu, DAL tiếp tục gởi danh sách (**) này sang BUS để xử lý (7)
(8) Tại BUS sau khi nhận được danh sách điểm từ DAL gởi sang, BUS thực hiện nghiệp vụ của mình bằng cách tính điểm trung bình, kết luận đậu/rớt của từng sinh viên (tất cả xử lý về mặt nghiệp vụ), sau đó gởi danh sách điểm đã xử lý (**) sang GUI để hiển thị (9)
(9) 1 lần nữa GUI có thể kiểm tra tính hợp lệ của dữ liệu và hiển thị thông tin và thông báo lên màn hình cho người dùng (10)

(**) Trong 1 số trường hợp vì lượng thông tin gởi nhiều, ví dụ như 1 sinh viên gồm nhiều thuộc tính như họ tên, tuổi, ngày sinh,… ta có thể dùng DTO để chuyển đối tượng hoặc danh sách đối tượng giữa các tầng với nhau cho tiện dụng.

3. Cách tổ chức mô hình trên ứng dụng .NET:

- Với mỗi tầng (DAL,BLL) ta tạo 1 project mới kiểu Class Library, sau khi buil ra các dll như: BUS.dll, DAL.dll . Khi đó:
+ Tầng GUI là project chính chương trình, vì đặc điểm GUI chỉ thấy BLL nên ta sẽ add references BLL.dll từ tab project vào GUI
+ Tầng BUS chỉ thấy được DAL, ta tiếp tục add references DAL.dll vào BUS
+ Tầng DAL giao tiếp được với database nên ta chỉ sử dụng các namespace data provider để tương tác với hệ quản trị CSDL

4. Một số câu kinh nghiệm khi sử dụng:

- Các thao tác trên control như: kiểm tra nhập hợp lệ, ẩn hiện các control, và các xử lý thông tin trên control thì ta đặt các hàm xử lý ngay trên GUI
- Các thao tác trên các dữ liệu cơ bản như: List, Array List, Object, DataTable, string, int, long, float,… ta xử lý ngay chính tầng nghiệp vụ BUS, vì bản chất khi thay đổi hệ quản trị hay các platform thì BUS không thay đổi
- Các thao tác với CSDL như truy vấn, kết nối, đóng kết nối,… ta xử lý trong DAL
- Khi có nhu cầu thay đổi hệ quản trị CSDL, ta chỉ cần thay đổi DAL phù hợp với hệ quản trị mới, giữ nguyên BUS, GUI và build lại project.
- Khi có nhu cầu chuyển đổi qua lại giữa ứng dụng web forms hoặc win forms ta chỉ cần thay GUI, giữ nguyên DAL,BUS và build lại project.

5. Sự khác biệt giữa 3-tiers và 3-layer:

3-tiers có nghĩa là 3 tầng, 3-layer có nghĩa là 3 lớp. Về mặt ý nghĩa tầng sẽ lớn hơn lớp, mỗi tầng sẽ có nhiều lớp.

Trích 1 bài viết:

Trích dẫn:The terms tier and layer are frequently used interchangeably, but actually there is a difference between them: Tiers indicate a physical separation of components, which may mean different assemblies such as DLL, EXE etc on the same server or multiple servers; but layers refers to a logical separation of components, such as having distinct namespaces and classes for the Database Access Layer (DAL), Business Logic Layer (BLL) and User Interface Layer (UIL). Therefore, tier is about physical separation and units of deployment, and layers are about logical separation and units of design.

- Khi dùng từ layer, chúng ta nói tới việc phân chia ứng dụng thành các thành phần một cách logic theo chức năng hoặc theo vai trò, điều này giúp phần mềm của bạn có cấu trúc sáng sủa, dễ dùng lại, từ đó giúp việc phát triển và bảo trì dễ dàng hơn. Các layer khác nhau khi được thực thi vẫn có thể nằm trong cùng một vùng bộ nhớ của một process, và hiển nhiên việc giao tiếp giữa 2 layer có thể không phải là giao tiếp giữa 2 process, đồng nghĩa với việc chúng không liên quan tới mô hình client/server.

- Trái lại, tier liên quan đến cách phân chia một cách vật lý các thành phần trên các máy tính khác nhau. Điều làm nhiều người nhầm lẫn giữa layer và tier là chúng có cùng cách phân chia (presentation, business, data), tuy nhiên trên thực tế chúng khác nhau. Vì cách phân chia như trên nên 1 tier có thể chứa nhiều hơn 1 layer.

Bạn thấy bài viết này như thế nào?: 
Average: 10 (2 votes)
Ảnh của Tommy Tran

Tommy owner Express Magazine

Drupal Developer having 9+ year experience, implementation and having strong knowledge of technical specifications, workflow development. Ability to perform effectively and efficiently in team and individually. Always enthusiastic and interseted to study new technologies

  • Skype ID: tthanhthuy

Advertisement

 

jobsora

Dich vu khu trung tphcm

Dich vu diet chuot tphcm

Dich vu diet con trung

Quảng Cáo Bài Viết

 
công ty Snapseed

Google đã chính thức mua lại công ty Snapseed

Theo trang tin Cnet, vào ngày hôm qua, gã khổng lồ trong lĩnh vực tìm kiếm trực tuyến Google đã chính thức mua lại công ty đứng đằng sau ứng dụng chỉnh sửa và chia sẻ hình ảnh trên iOS Snapseed - một trong những đối thủ sừng sỏ của Instagram - nhằm mục tiêu cạnh tranh trực tiếp với Facebook.

Number 3: Performance - 5 lổi cần tránh trong Drupal Website

Number 3: Performance - 5 lổi cần tránh trong Drupal Website

Performance is crucial for providing a great user experience. If the site is slow or balky, even great functionality won’t keep the site visitor engaged.

Bản đồ các quốc gia bị ảnh hưởng bởi botnet Necurs.

Microsoft đánh sập mạng botnet điều hành bởi Evil Corp có trụ sở ở Nga

Microsoft và các đối tác tại 35 quốc gia đánh sập mạng botnet spam và phát tán mã độc Necurs lây nhiễm khoảng chín triệu máy tính toàn cầu.

Công ty diệt chuột T&C

 

Diet con trung