Go down
Thắng
Thắng
Admin
Posts : 55
Join date : 2018-03-14
https://toilathang.forumvi.com

Mô hình 3 lớp (3 layers) có gì hay? Empty Mô hình 3 lớp (3 layers) có gì hay?

Sat Mar 17, 2018 11:46 pm
“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)

Trích wiki

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.

Giới thiệu mô hình 3-layer ( 3 lớp)

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,…).

Ưu điểm

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.

1. Presentation Layer (GUI):

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.

2. Bussiness Layer (BLL) :

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.

3. Data Layer (DAL) :

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 mình sẽ tạo ra một hướng dẫn làm phần mềm quản lý khảo sát cho các bạn ở thư mục Công nghệ thông tin

Techtalk via huatrung
Thắng
Thắng
Admin
Posts : 55
Join date : 2018-03-14
https://toilathang.forumvi.com

Mô hình 3 lớp (3 layers) có gì hay? Empty Re: Mô hình 3 lớp (3 layers) có gì hay?

Sun Mar 18, 2018 10:02 am
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.
Thắng
Thắng
Admin
Posts : 55
Join date : 2018-03-14
https://toilathang.forumvi.com

Mô hình 3 lớp (3 layers) có gì hay? Empty Re: Mô hình 3 lớp (3 layers) có gì hay?

Sun Mar 18, 2018 5:12 pm
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.

Mô hình 3 lớp (3 layers) có gì hay? Forum_10

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 (Cool 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)

(Cool 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.

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.
Sponsored content

Mô hình 3 lớp (3 layers) có gì hay? Empty Re: Mô hình 3 lớp (3 layers) có gì hay?

Back to top
Permissions in this forum:
You cannot reply to topics in this forum