Hỏi đáp về mô hình 3 tầng


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

Theo wikipedia thì:

“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).

Như vậy, ta có thể mô hình này phân tách ứng dụng ra làm 3 module riêng biệt, bao gồm:

– Tầng Presentation: được dùng để giao tiếp với người dùng, nhiệm vụ chính là hiển thị dữ liệu và nhận dữ liệu từ người dùng.

– Tầng Business Logic: nhiệm vụ chính là cung cấp các chức năng của phần mềm.

– Tầng Data: lưu trữ dữ liệu, cho phép lớp Business Logic có thể tìm kiếm, trích xuất, cập nhật… dữ liệu.

2. Tại sao là 3-tiers mà không phải là 3-layers?

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.

3. 3-tiers có những ưu và nhược điểm gì?

3-tiers là một kiến trúc phần mềm, có nghĩa là bạn có thể dùng nó để xây dựng nên bộ khung tổng thể của ứng dụng. 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.

4. Những công nghệ nào hỗ trợ xây dựng các ứng dụng 3-tiers?

Tùy thuộc vào nền tảng, bạn có thể chọn một trong các công nghệ như EJB (J2EE), COM+ (Windows), hay cũng có thể dùng các máy chủ web như nền tảng xây dựng lớp giữa (dùng webservice). Tuy nhiên, EJB và COM+ là hai tùy chọn tốt nhất vì nó có nhiều công nghệ hỗ trợ như Object Pooling, Authentication và Authority, Resource management, Remote Object Access, Transaction…

Các công nghệ truyền thông điệp như JMS hay MSMQ cũng hỗ trợ nhiều trong việc tạo các lời gọi không đồng bộ.

5. Các ứng dụng máy chủ cơ sở dữ liệu có liên quan gì đến mô hình này không?

Có, nó đóng vai trò tầng Data.

Bản thân khi hoạt động, máy chủ CSDL trở thành 1 phần không thể thiếu trong hệ thống, nó chính là nơi chứa dữ liệu của bạn. Việc dùng một hệ CSDL sẵn có là việc nên làm vì nó giúp chúng ta rất nhiều công sức, nhưng điều đó không có nghĩa là nó không thuộc vào hệ thống của chúng ta, chỉ khác ở chỗ đây là một tầng Data được xây dựng sẵn.

6. Lớp Data Access Layer (DAL) thuộc tầng nào?

Lớp Business Logic.

Trái với nhiều người nghĩ, cứ cái gì có chữ Data thì nó phải thuộc lớp 3, tuy nhiên vì DAL chỉ đóng vai trò truy vấn, chứ bản thân nó không cung cấp dữ liệu, và nó vẫn phải được thực thi bởi các Business Object, vậy nên trong đa số trường hợp nó sẽ nằm trong lớp 2 (một số thiết kế tách nó riêng thành 1 tier).

Nên nhớ rằng việc tách riêng ra một DAL giúp bạn có một thiết kế tốt hơn, nhưng không phải là bắt buộc. Và việc tự tạo một DAL với việc dùng chung một tập các lớp truy xuất dữ liệu được cung cấp bởi một công nghệ/công cụ có sẵn như LINQ to SQL, NHibernate hay Entity Framework không có gì khác nhau về kiến trúc hệ thống.

Có lẽ vì sự tồn tại của DAL mà rất nhiều người hiểu nhầm giữa 3-tiers và 3-layers.

7. Tôi nên kiểm tra dữ liệu nhập bởi người dùng ở lớp nào?

Kiểm tra dữ liệu ở lớp giao diện giúp giảm tải cho lớp giữa, phản hồi cũng nhanh hơn. Tuy nhiên sẽ khó có thể đảm bảo sẽ không có kẽ hở để những dữ liệu không hợp lệ được chuyển đến lớp Business Logic và thậm chí lớp Data, vậy nên thông thường việc kiểm tra nên được đặt trong tất cả các lớp tùy thuộc vào từng loại dữ liệu và phép kiểm tra.

8. Tôi có một ứng dụng, nó không có giao diện người dùng vì nó chỉ nhận dữ liệu từ các ứng dụng khác, tôi có thể viết theo mô hình 3-tiers được không?

Có, từ Presentation ở đây không mang ý nghĩa giao diện tương tác với người dùng, mà nó có nghĩa rộng hơn là phần tương tác với các hệ thống bên ngoài, ví dụ Presentation có thể là phần kết nối để truy xuất dữ liệu đến một hệ thống khác, hay một cổng để tiếp nhận các lệnh do một hệ thống khác chuyển đến.

9. Tôi nên đọc thêm tài liệu nào để hiểu kỹ hơn về mô hình 3 lớp và cách dùng hiệu quả các công nghệ như EJB và COM+?

Bạn có thể đọc thêm 2 quyển:

Designing Enterprise Applications with the J2EE Platform, Second Edition, dành cho người làm J2EE (http://java.sun.com/blueprints/guidelines/designing_enterprise_applications_2e/).

– Application Architecture Guide 2.0, quyển này của các bác MS (http://www.codeplex.com/AppArchGuide/)

Ngay cả khi chưa viết ứng dụng mới mô hình 3-tiers thì bạn cũng RẤT RẤT RẤT nên đọc 2 quyển trên.

10. 3-tiers có giống MVC không?

Không, trong 3-tiers, quá trình đi theo chiều dọc, bắt đầu từ Presentation, sang BL, rồi tới Data, và từ Data, chạy ngược lại BL rồi quay ra lại Presentation.

Còn trong MVC, dữ liệu được nhận bởi View, View sẽ chuyển cho Controller cập nhật vào Model, rồi sau đó dữ liệu trong Model sẽ được đưa lại cho View mà không thông qua Controller, do vậy luồng xử lý này có hình tam giác.

(Đang cập nhật thêm, nếu có thắc mắc, các bạn có thể post vào phần comment ở dưới)


71 thoughts on “Hỏi đáp về mô hình 3 tầng

  1. anh có ví dụ nào đơn giản về mô hình 3 lớp có thể cho em được không?
    em cảm ơn những bài viết rất bổ ích của anh!
    Chúc anh thành công trong cuộc sống!

  2. Mình nghĩ 3-tiers dịch sang tiếng việt có nghĩa là 3 tầng tránh dùng 3 lớp nhầm với 3-layers

  3. vậy anh có thể nói cho em sự khác nhau của 3 tầng và 3 lớp như thế nào ko ạ?

  4. @KOP: khi viết mình cũng băn khoăn về việc dùng 3 lớp hay 3 tầng, thực ra từ 3 tầng sát nghĩa hơn, nhưng mình quen dùng từ 3 lớp hơn :”>. Cuối cùng mình quyết định hạn chế dịch từ này, nếu có thì phải kèm từ gốc, còn tốt nhất là để nguyên từ tiếng Anh, như vậy người đọc sẽ không bị nhầm lần, và sau này tham khảo tài liệu cũng dễ dàng hơn.
    @nvchuyen: em xem câu 2 nhé

  5. Anh Nam ơi!
    Em là sinh viên anh ạ! Em đang làm 1 trang web trên asp.net và c#, ngoài ra còn phải tìm hiểu silverlight, WCF RIA sevices, Blend. Vậy anh chỉ giúp em cách học sao cho có hiệu quả được không ạ!
    chân thành cảm ơn anh!

  6. Chào anh, cho em hỏi một ứng dụng client-server truyền thống dùng 2 tier thì những tier đó là tầng nào?

  7. Nghe tên là biết rồi em :), nó gồm 2 tầng là client và server.
    Thường thì chỉ cần client-server là đủ, trong một số trường hợp chi tiết hơn người ta có thể dùng thêm khái niệm fat client-thin server, là khi lớp Business nằm ở tầng client, hoặc thin client-fat server khi lớp Business nằm trên server.

  8. Em chào anh!
    Em cám ơn anh vì những bài viết hay và bổ ích. Em có một vấn đề này muốn hỏi anh là có cách nào để cải tiến tốc độ của chương trình viết bằng mô hình 3 tier không?

  9. Có rất nhiều, nhưng điều quan trọng hơn là phải xác định chỗ nào làm chương trình chạy chậm.

  10. Anh Nam ơi trong silverlight tầng business logic nằm ở server hay client vậy anh, với lại trong linq khi tạo nó có một lớp vậy mình có tạo lớp dto không? ^^!

  11. Với ứng dụng 3 tầng thì Silverlight đóng vai trò tầng Presentation, BL tier nằm bên phía server.
    Còn việc có tạo DTO thì tùy người thiết kế, có DTO thì presentation sẽ không cần tham chiếu đến các lớp LINQ nữa.

  12. Em đang viết chương trình theo mô hình 3 lớp. Bây giờ có một cái thắt mắt là trong mô hình 3 lớp mô phỏng lại các bảng, từ các bang đó ta tạo thành các đối tượng và chạy các store pro với các tham số hay các cột tương ứng. một vấn đề là khi tạo báo cáo thì ngoài những trường mà có trong bảng ra rồi còn định nghĩa nhiều cột khác nữa. Bây h muốn đọc ra lưới chẳng hạn thì chúng ta củng phải định nghĩa đối tượng cho các store hay sao?? Nếu vậy chương trình có 100 store procedure thì phải định nghĩa thêm 100 đối tượng nữa ngoài các bảng hay sao??
    Mong được giải đáp

  13. Bản thân mô hình n-tiers không chỉ định cách thức cụ thể để truy xuất dữ liệu, do vậy em không bắt buộc phải dùng cách trên.
    Thông thường việc tạo các đối tượng cho các lớp chỉ là một trong những cách giúp việc truyền dữ liệu đơn giản hơn nhờ sự chặt chẽ về kiểu, nhưng đó không phải là cách duy nhất. Em có thể dùng DataSet, DataTable, Collections hay bất cứ thứ gì để truyền dữ liệu giữa các tầng.
    Bản thân việc chọn cách dùng đối tượng hay các cách khác cũng phụ thuộc vào việc các cấu trúc dữ liệu trả về có thường xuyên thay đổi hay không, và ngay trong một ứng dụng cũng có thể áp dụng đồng thời nhiều cách khác nhau. Ở đây em phải cân nhắc cẩn thận trước khi lựa chọn cách nào, cũng như sử dụng nó như thế nào. Đó là lý do tại sao chúng ta đã có rất nhiều phương pháp thiết kế, kiến trúc, design pattern… nhưng vẫn phải cần đến những người thiết kế 🙂

  14. Team em đang có 1 project cũng khá lớn pt bằng Net. Em định tổ chức ra thành nhiều project nhỏ cho mỗi thành viên. Em đang có ý định phân chia thành nhiều project nhỏ (theo nhóm chức năng) trong đó mỗi một project đều có kiến trúc 3 tầng riêng. Theo anh thì tổ chức như vậy đã được chưa?? và có bổ sung cũng như khó khăn j không?

  15. Với những thông tin em cung cấp thì thật khó để có câu trả lời chính xác, đặc biệt là anh lại không biết quy mô, yêu cầu của các project đó. Tuy nhiên theo anh nghĩ thì trong một dự án khó có thể tất cả các thành phần đều hoạt động theo cùng một cách, vậy nên việc chọn một kiến trúc để áp dụng cho toàn bộ các dự án nhỏ bên trong có vẻ cứng nhắc. Bản thân việc phân chia các dự án theo nhóm chức năng không phải lúc nào cũng đúng.
    Anh nghĩ em nên cân nhắc cẩn thận, như đã nói ở trên, anh không rõ về dự án của em nên không thể trả lời chính xác. Nhưng anh cảm nhận có vấn đề trong cách tổ chức dự án của em.

  16. Chào a Nam! bài viết của a về mô hình 3 lớp rất hay! Em đang làm project Asp.net yêu cầu sử dụng mô hình 3 tiers đồng thời sử dụng Linq. Em không biết làm sao! Mong anh chỉ giúp e! Chân thành cảm tạ! Em nghĩ làm sao có thể sử dụng vừa 3 tiers và Linq đc! Em đang học môn Xây dựng Phần mềm theo mô hình Phân lớp !

  17. Đối với ứng dụng web, thông thường thì Presentation, và Bussiness nằm trên cùng 1 Server đó là WebServer (Tomcat, Apache hoặc IIS), còn 1 Server khác đảm nhiệm việc chạy DB (máy đó có thể cài Mysql, MS Sql Server hoặc Oracle,…)

    Ngon hơn có thể tách Presentation và Bussiness ra 2 Server riêng: Presentation là WebServer còn Bussiness có thể là Server sử dụng công nghệ EJB hoặc COM+

    Như thế có đúng không nhỉ??? Mong được chỉ giáo thêm.

  18. Chính xác đó bạn, ngay cả khi P và B cùng nằm trên 1 server, việc dùng EJB hay COM+ cũng giúp ích rất nhiều.

  19. Có một lập luận em thấy cũng đúng tuy nhiên so với cách hiểu bên trên của em thì nó khác.

    N-Tier là việc triển khai hình thức vật lý. Mỗi tier chạy trên một máy/cụm máy cụ thể. Còn mỗi layer là một thành phần phần mềm được thiết kế để làm một công việc chuyên biệt. (Tham khảo từ http://www.ddth.com/showthread.php?t=317578)

    Vì vậy,
    Presentation là các máy client chạy Web Browser.
    Bussiness là các Web Server.
    Data Access Layer là máy chạy Database (máy đó có thể cài Mysql, MS Sql Server hoặc Oracle,…)

    Em muốn tham khảo thêm ý kiến anh namdh về vấn đề trên là như thế nào?

  20. Anh đọc thấy lẫn lộn hết cả.
    – Presentation(P) + Business(B) + Data(D) là 3 thành phần độc lập theo mô hình client/server. Trong đó (B) là client của (D) đống thời là server của (P).
    – Việc chúng chạy trên 1 hay nhiều máy khác nhau không quan trọng, đó chỉ là cài đặt vật lý (physical deployment) mà thôi.
    – Công nghệ web (bao gồm Web Browser + Web Server) là một tùy chọn cho việc viết các ứng dụng nói chung cũng như ứng dụng 3-tiers.
    – Data Tier(D) (không phải Data Access Layer) là thành phần quản lý dữ liệu, trong đa số trường hợp chính là phần mềm quản trị CSDL. Data Tier không phải là các lớp kết nối và truy xuất dữ liệu, cũng không phải là cái máy để chạy CSDL.

  21. Một ứng dụng bình thường có dùng đến cơ sở dữ liệu như SQL Server, Oracle… đã là một ứng dụng 2 tầng (client/server). Trong đó ứng dụng do bạn viết là một tầng, hệ quản trị CSDL bạn dụng là tầng còn lại – đồng thời nó chính là Data Tier. Vậy nên dễ hiểu nhất là nếu lấy ứng dụng 2 tầng đó tách phần hiển trị, trình bày dữ liệu và phần xử lý dữ liệu ra một lần nữa (tách thành 2 tầng) thì nó là ứng dụng 3 tầng.

  22. Anh cho em hỏi rằng trong 1 layer co thể cài MVC hay không và ngược lại!

  23. Chào bạn ,hình như phần 6 bạn có nói lẫn lộn giữa “tầng” và “lớp” rồi thì phải bạn xem lại có đúng không .

  24. 3 Tier và 3 Layer có phải đều cùng là một kiến trúc phần mềm nhưng một cái phân tách vật lý còn một cái phân tách Logic theo chức năng không anh Nam.

  25. a co the cho e 1 vi du ve lap trinh da tang va Nhbernate dc k a

  26. Anh Nam ơi cho e hỏi,trong LINQ thì lớp DTO và DAL đều đc mapping bởi LinQ to SQL (nằm ở file dbml) .Vì thế trong lớp GUI, ngoài nhúng thư viện của lớp BLL thì nó buộc phải nhúng cả lớp DAL (tức là lớp chứa .dbml), nếu ko nhúng thì nó sẽ ko hiểu đc lớp DTO trong BLL. Vậy có cách nào tách biệt lớp DAL ra khỏi lớp GUI ko ?

    Cảm ơn anh, chúc a dồi dào sức khoẻ, mong nhận đc hồi âm sớm từ a.

  27. Hi Anh !
    Đọc bài viết của anh rất hay, đây cũng là vấn đề mà em quan tâm.
    Qua đây em cũng muốn hỏi anh 1 câu:
    Hiện em đang nghiên cứu công nghệ WPF – WCF của DotNet, anh cho em hỏi là liệu đây có phải là kiến trúc 3-Tier không ạ?
    Em cảm ơn.

  28. Anh ơi cho em hỏi e có xem 1 số video ở trên mạng về mô hình 3 layer nhưng cách làm thì khác nhau.Có video thì sử dụng add dll. Có video thì sử dụng data tranfer object để vận chuyển dữ liệu giữa các lớp. Mong anh giải đáp. Em cảm ơn. A có demo về mô hình 3 layer thì post cho em a nhé !

  29. Anh có thể viết 1 bài hướng dẫn em làm một project demo trong đó sử dụng mô hình 3-tier và Linq được không? Cảm ơn anh.

  30. @Bùi Thành Nhân: Không em ạ, chỉ có cách tạo thêm các DTO nhưng như vậy sẽ rất mất công

  31. @Nguyễn Nam Hải: WPF – WCF không phải là kiến trúc 3 lớp, mà là các công nghệ để tạo nên kiến trúc 3 lớp.

    3-tiers là kiến trúc chứ không phải là công nghệ

  32. @luong thuan: Việc add DLL hay tạo các lớp DTO thì cũng chỉ là kỹ thuật để viết nên ứng dụng thôi em ạ, nó không phản ánh được ứng dụng có là 3-tiers hay không.

  33. hi a, a có thể cho e nick yahoo hoặc email của a được không? e có một số câu hỏi về mô hình 3 lớp muốn được a chỉ cho!

  34. hi a, a có thể cho e nick yahoo hoặc email của a được không? e có một số câu hỏi về mô hình 3 lớp muốn được a chỉ cho! hihi

  35. Cảm ơn vì bài viết của anh.

    Từ trước tới giờ, em cứ nhầm lẫn mô hình 3 lớp, 3 tầng. Hôm nay đọc bài viết của anh hiểu ra nhiều điều

    2 quyển sách anh gợi ý đọc quá hay luôn.

    Em cảm ơn anh

  36. anh có tài liệu nào giải thích ý nghĩa các câu lệnh trong DataHelper cho em xin .Cảm ơn anh.

  37. Em muốn hỏi một điều nữa. Bây giờ nếu như làm 1 website cho phép thêm chức năng bằng cách import modules và plugin (giao diện tương tự) kiểu như mã nguồn joomla bên php thì nên làm theo mô hình nào? Cảm ơn anh

  38. Có nhiều cách để làm điều đó, và nó không phụ thuộc vào việc em dùng kiến trúc nào

  39. Anh cho e hỏi: Trong asp.net MVC thì mình muốn view hiển thị dữ liệu thì vẫn phải thông quan Model & ViewData, ViewBag, vậy thì view nhận dữ liệu từ controller đấy chứ? Nó làm sao nhận dữ liệu trực tiếp từ Model dc??? Mong a giải thích hộ e.

  40. Thế trong view em lấy dữ liệu từ đâu để hiển thị, he he ?

  41. Nếu nói vậy thì 3 tầng cũng vậy mà anh. Cái nào chẳng phải lấy từ Model(hay DAL) ra, dữ liệu thì controller hay BLL tự sinh ra làm sao dc. Mong anh giải thích thêm.

  42. Thực ra Model và DAL khác nhau, Model đóng vai trò như bộ chứa dữ liệu, nó chỉ cung cấp các phương thức/thuộc tính để truy xuất hay tính toán trên các dữ liệu nó chứa. Còn DAL lại là một layer, hay nói các khác là một module cung cấp các chức năng truy xuất vào kho dữ liệu, DAL có thể cung cấp dữ liệu cho các thành phần khác, như Business Logic Layer hay Presentation Layer (tùy mô hình), dưới dạng các DTO (Data Transfer Object), các DTO này mới có chức năng tương tự Model trong MVC.
    Đó là về chức năng, còn về cách thức tương tác giữa các thành phần thì MVC và 3-layers (hay 3-tiers) hoàn toàn khác nhau.

  43. Anh vẫn đang có kế hoạch viết 1 loạt bài về MVC và Entity Framework, tuy nhiên do hơi bận rộn nên chưa làm được.
    Mô hình hoạt động của Winform không phù hợp với MVC em ạ

  44. Hì hèn cho lên mạng kiếm cái mô hình MVC cho winform hiếm như là mò kim đáy biển vậy, toàn là nói về mô hình 3 tầng, mô hình 3 lớp ko ah. Thank anh nhe. em nghỉ mà anh ko có comment chắc em chết đuối với cái Prọect này rồi, làm hoài mà nó có nhiều cái em ko nghỉ ra cách giaiả quyết, nó khác với ASP.NET MVC. THANK ANH NHA!

  45. Chào anh Nam. Cảm ơn anh về bài viết cũng như các câu trả lời rất hay và bổ ích.
    Em mới tìm hiểu về MVC chưa lâu, anh có project demo nào đơn giản không, nếu có cho em xin để tham khảo. Email em là bluesky@conlocviet.net.
    Thank!

  46. Chào anh!
    Anh cho em hỏi:trong n-tier có thể sử dụng MVC được không?Tai sao?

  47. MVC là một pattern dùng trong presentation, vậy nên hai cái hoàn toàn dùng chung với nhau được.
    Một ví dụ là em có thể có 1 ứng dụng, trong đó giao diện sử dụng bằng ASP.NET MVC, trong các controller, em sẽ gọi các phương thức từ tầng business (COM+, webservice…).

  48. Cám ơn nhiều về các ý kiến rất bổ của anh namdh nha, em đang làm một đồ án phần mềm quản lý áp dụng mô hình 3 tier, mặc dù xây dựng được chương trình nhưng do không hiểu rõ lắm về mô hình này, còn đang phân vâng không biết là DAL thuộc tầng nào nên làm bài báo cáo về kiến trúc phần mềm em không biết báo cáo sao, mai mà đọc được bài viết này, thật là hay.

  49. Dữ liệu chứa trong Model sẽ được chuyển đến cho View (bởi Controller) để hiển thị, khi cập nhật, người dùng sẽ POST dữ liệu lên thì dữ liệu đó được chuyển cho Controller (để cập nhật Model), rồi tiếp tục Controller sẽ chọn 1 View phù hợp để gửi Model phù hợp để hiển thị…
    Sự khác nhau trong 2 bài là vì dữ liệu đang nói đến là để hiển thị hay cập nhật.

  50. Chào anh.
    Em cũng hay tham khảo các bài viết của anh. Rất hữu ích.
    Em có 1 thắc mắc mong anh sẽ bỏ chút thời gian giúp em, bởi vì em đang rất lúng túng.
    Em đang xây dựng 1 ứng dụng web theo mô hình 3 lớp.
    – Lớp DAL em kết nối CSDL bằng Linq (chỉ có kết nối thôi nha).
    – Lớp BAL thực hiện lệnh.
    – Lớp giao diện sử dụng các dịch vụ của BAL
    Nhưng em làm website này theo kiểu project. 3 lớp là 3 project trong 1 solution.
    Giờ em muốn lưu chuỗi kết nối của tầng BAL ( ở tầng BAL em có khai báo DataContext dtx=new DataContext(Chuoi ket noi); ). Giờ em Reference 2 Project này tới Website nhưng em muốn lưu chuỗi kết nối ở webconfig.
    Vậy làm sao em có thể lưu chuỗi kết nối ở web.config mà ở tầng BAL vẫn đọc được để tầng DAL có thể làm việc được.
    Em viết hơi khó hiểu, mong anh thông cảm.
    Cảm ơn anh rất nhiều.
    Chúc anh vui vẻ.

  51. Anh ơi! Anh giúp em câu hỏi này nha!
    so sánh 4 kiến trúc: 3 player, net-tier, nhibernate, linqO?
    – So sánh sự giống nhau và khác nhau
    – Ưu, khuyết điểm của từng kiến trúc
    Cám ơn anh rất nhiều!

  52. Chào anh! Kỳ này em phải làm một cách đồ án nghiên cứu về mô hình n-tier. Thông qua google em đã tra cứu tìm hiểu phần nào về nó. Nhưng có một điểm em thắc mắc là tại sao người ta lại hay nhắc tới mô hình 3-tier(tạm dịch là mô hình 3 tầng) mà lại không thấy nói gì về n-tier. Giữa n-tier và 3-tier nó khác nhau như thế nào vậy anh? Hiểu biết em còn nông cạn. MOng anh giải đáp giúp cho em. Cảm ơn 🙂

  53. 3-tiers là mô hình tiêu biểu của n-tiers, tức trong mô hình n-tiers thì tối thiểu phải có 3 tầng như nói đến trong bài, ít hơn thì không gọi là n-tiers. Và khi có nhiều hơn 3 tiers thì thực chất cũng chỉ là tách 1 tầng trong 3-tiers ra 2 hoặc nhiều tầng khác.

  54. Anh ơi !
    Ở trên a nói MVC không phù hợp với các ứng dụng webform.
    A cho em tham khảo tại sao được ko?
    Thank a.

  55. Đơn giản là 2 mô hình nó không giống nhau, trong thực tế vẫn gặp trường hợp dùng chung, ví dụ 1 ứng dụng MVC nhưng có vài trang report bằng Webform, tuy nhiên chỉ nên giới hạn trong một tỷ lệ thật nhỏ, nếu không ứng dụng sẽ trở nên rất khó bảo trì.

  56. E có thể két họp 3 tier cùng với MVC dc không ạ, nếu đưucọ anh cho em 1 template mẫu về cái này giúp em được không ạ e cảm ơn

  57. Mình mới tham gia vào dự án winform, vậy mình nên sử dụng mô hình này hay Linq hay ado.net?

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s