Chuyên đề Tìm hiểu và xây dựng ứng dụng web siêu thị trực tuyến với asp.net mvc

• Moudle thương mại - Duyệt toàn bộ các gian hàng trong siêu thị - Xem một gian hàng với danh sách các mặt hàng có trong gian hàng - Xem chi tiết một sản phẩm trong gian hàng , đưa vào giỏ hàng. - Quản lí các gian hàng, tạo một gian hàng - Quản lí các sản phẩm (chỉnh sửa thông tin sản phẩm, xóa sản phẩm), tạo sản phẩm

doc126 trang | Chia sẻ: vietpd | Lượt xem: 1698 | Lượt tải: 4download
Bạn đang xem trước 20 trang tài liệu Chuyên đề Tìm hiểu và xây dựng ứng dụng web siêu thị trực tuyến với asp.net mvc, để xem tài liệu hoàn chỉnh bạn click vào nút DOWNLOAD ở trên
ĐẠI HỌC THĂNG LONG BỘ MÔN TIN HỌC CHUYÊN ĐỀ TỐT NGHIỆP TÌM HIỂU VÀ XÂY DỰNG ỨNG DỤNG WEB SIÊU THỊ TRỰC TUYẾN VỚI ASP.NET MVC SINH VIÊN : ĐẶNG TIẾN LỘC – A07138 GIÁO VIÊN HƯỚNG DẪN : Ths. ĐOÀN QUANG MINH HÀ NỘI 5/ 2010 BẢNG KÝ HIỆU VIẾT TẮT MVC Model View Controller Mô hình lập trình ba lớp Model, View, Controller được sử dụng trong nhiều framework lập trình web trong đó có ASP.NET MVC, ZEND , J2EE… API Application Programming Interface Giao diện lập trình được sử dụng bởi một ứng dụng qua đó cho phép nó tương tác với ứng dụng khác ACK ACKnowledgement Thừa nhận một trường xác thực trong gói tin http. URL Uniform Resource Locator Địa chỉ website LINQ .NET Language Intergrated Query Ngôn ngữ truy vấn tích hợp với .NET CDN Content Delivery Network Mạng phân phối nội dung SMTP Simple Mail Transfer Protocol Giao thức gửi thư điện tử SSL Secure Socket Layer Tầng bảo mật Socket IIS Internet Information Server Máy chủ thông tin mạng EML Electronic Mail Thư điện tử (đuôi của tệp thư điện tử) DOM Document Object Model định nghĩa tập các đối tượng chuẩn cho tất cả tài liệu có cấu trúc UI User Interface Giao diện người dùng CPU Control Processing Unit Bộ điều khiển xử lí trong máy tính MỤC LỤC GIỚI THIỆU CHUNG Trong chuyên đề tốt nghiệp này em thực hiện việc tìm hiểu ASP.NET MVC , mô hình thương mại điện tử trực tuyến của các chuỗi siêu thị lớn trên thế giới như , qua đó xây dựng hệ thống thương mại trực tuyến trên nền tảng gồm các module: Module thành viên và hồ sơ. Đăng kí tài khoản Đăng nhập, đăng xuất Quản lí hồ sơ Quản lí vai trò người dùng, xóa , tạo vai trò Quản lí người dùng, tìm kiếm người dùng theo tên – theo email , xóa người dùng, sửa đổi thông tin người dùng Moudle thương mại Duyệt toàn bộ các gian hàng trong siêu thị Xem một gian hàng với danh sách các mặt hàng có trong gian hàng Xem chi tiết một sản phẩm trong gian hàng , đưa vào giỏ hàng. Quản lí các gian hàng, tạo một gian hàng Quản lí các sản phẩm (chỉnh sửa thông tin sản phẩm, xóa sản phẩm), tạo sản phẩm Quản lí các chọn lựa cách thức giao hàng (xóa, thêm cách thức giao hàng) Quản lí các đơn đặt hàng (xem chi tiết đơn hàng) Mudule tin tức – bài báo - blog Xem toàn bộ bài báo Xem theo đầu mục, chọn rss Xem chi tiết , viết lời bình và đánh giá bài báo Quản lí các đầu mục, tạo đầu mục Quản lí các bài báo (chỉnh sửa, xóa), tạo bài báo mới Quản lí các nhận xét bài báo Module chưng cầu ý kiến khách hàng Xem các chưng cầu - polls, cho ý kiến (vote) Quản lí các chưng cầu (chuyển chưng cầu sang trạng thái đã lấy đủ ý kiến - archive, hiện hành, chỉnh sửa chưng cầu, xóa chưng cầu) , tạo chưng cầu mới Module gửi thư từ hệ thống Xem ,xóa các thư đã gửi Tạo thư và gửi Module định vị cửa hàng siêu thị gần nhất Tìm các siêu thị trong khoảng cách nhất định Tìm đường đi tới 1 siêu thị Thêm vị trí siêu thị mới vào hệ thống Module Forum Duyệt các diễn đàn. Xem các bài thảo luận, tham gia thảo luận , xác nhận thích hay không thích bài thảo luận, tạo bài thảo luận Quản lí các diễn đàn (chỉnh sửa , xóa diễn đàn) Quản lí các bài thảo luận (approve, đóng , xóa bài thảo luận) Module quốc tế hóa Hiển thị các thông tin địa phương ứng với thông tin địa phương trong hồ sơ người dùng như tiền dùng ở địa phương, thời gian, cách viết con số của địa phương,… Module kiểm thử Kiểm thử phần bài báo, blog Kiểm thử phần gửi thư CHƯƠNG 1: MỞ ĐẦU LÍ DO THỰC HIỆN ĐỀ TÀI Tổng quan về ASP.NET MVC Không phải tự nhiên mà rất nhiều web programming framework phổ biến nhất hiện nay kế thừa các nguyên tắc của MVC như Django, Ruby on Rails, CakePHP, Struts, … Sự thành công của việc kế thừa kiểu mẫu lập trình này cuối cùng cũng đã khiến Microsoft quyết định đưa các nghuyên tắc đó vào sử dụng trong .NET Framework và rồi hình thành nên ASP.NET MVC đầu năm 2007 phiên bản 1.0 . Kiểu mẫu lập trình các ứng dụng nền tảng Web này tuy rằng không phải là kiểu mẫu lập trình tốt nhất hiện nay xong nó có những ưu điểm nhất định và được sử dụng khá phổ biến và đang tiếp tục được hỗ trợ phát triển của Micorosoft. Chính vì những lí do này mà nó đáng được tìm hiểu để từ đó sử dụng một cách hiệu quả. Tổng quan về ứng dụng thương mại siêu thị trực tuyến Việc mua bán kinh doanh hiện nay đang ngày càng trở nên dễ dàng hơn với sự hỗ trợ của CNTT hiện tại có một số lượng rất lớn các website thương mại đã được xây dựng và sử dụng . Việc này giúp đa dạng hóa các phương thức bán hàng và vì vậy hàng hóa được tiêu thụ dễ dàng hơn. Có rất nhiều ích lợi từ việc kinh doanh trực tuyến có thể thấy được như: Đối với khách hàng: Mua hàng ở bất kể đâu miễn là họ có máy tính kết nối mạng. Nhanh chóng tìm kiếm được mặt hàng cần mua chỉ qua vài click chuột. Không phải đối mặt với nhân viên bán hàng. … Đối với doanh nghiệp: Có thêm được một kênh quảng bá sản phẩm hiệu quả mà chi phí thấp. Nắm bắt được thông tin phong phú về thị trường và đối tác. Thiết lập được mối quan hệ tốt với khách hàng và đối tác. Đa dạng hóa các kênh bán hàng của doanh nghiệp. …. Hệ thống siêu thị trực tuyến là một ví dụ điển hình về thương mại điện tử nó có đầy đủ các module mà một hệ thống thương mại điện tử cần có. Trong chuyên đề tốt nghiệp của mình em sẽ xây dựng hệ thống bán hàng trực tuyến theo mô hình MVC dựa trên nền tảng công nghệ .NET. SƠ LƯỢC VỀ YÊU CẦU KIẾN TRÚC CỦA HỆ THỐNG Yêu cầu đặt ra cho kiến trúc hệ thống Xây dựng nên hệ thống siêu thị trực tuyến cấu thành từ các module riêng biệt đồng thời quản lí nội dung động như bài báo,diễn đàn, phiếu điều tra (polls) và gửi thư từ hệ thống thì cần giải quyết các vấn đề chung đặt ra với mỗi module đó là: Tách biệt mã lệnh truy cập CSDL với mã lệnh logic nghiệp vụ và mã lệnh cho giao diện để hệ thống có thể dễ dàng bảo trì và mở rộng . Cô lập kiến trúc truy cập CSDL để từ đó có thể hỗ trợ việc lưu trữ với các CSDL quan hệ khác nhau như SQL , MySQL , Oracle,.. mà không phải thực hiện thay đổi nào với tầng đối tượng nghiệp vụ. Ngược lại việc thay đổi tầng trình diễn (giao diện người dùng) hay tầng đối tượng nghiệp vụ cũng không làm thay đổi các tầng còn lại – Tạo ra tính decoupling cho hệ thống. Thiết kế kiến trúc đối tượng nghiệp vụ lấy từ tầng truy cập CSDL theo kiểu hướng đối tượng bằng cách ánh xạ cơ sở dữ liệu quan hệ vào các lớp OOP. Hỗ trợ cơ chế caching với các đối tượng nghiệp vụ .Điều này giúp làm giảm việc sử dụng CPU, nguồn CSDL, băng thông mạng – network bandwidth và như vậy làm tăng hiệu năng chung của hệ thống. Tạo tệp cấu hình cho các module để có thể dễ dàng thay đổi chúng. Thiết kế kiến trúc hệ thống Với các dự án ASP.NET web forms truyền thống ta sẽ không bao giờ thực sự tách riêng được phần giao diện người dùng với logic ứng dụng bởi vì .NET cung cấp sẵn các điều khiển phía máy chủ (server side control) mà ta thường sử dụng bằng cách kéo thả vào các Web Form ví dụ như GridView. Các control kiểu này giúp chúng ta thực hiện khá nhiều việc tuy nhiên lại thường làm cho mã lệnh xử lí logic của ứng dụng lẫn vào với mã lệnh giao diện. Một ví dụ thường thấy đó là việc tạo ra logic để sắp xếp các GridView hay lọc dữ liệu ứng với một sự kiện nhấn chuột. Khi sử dụng những control như thế ta luôn cần có các tệp mã lệnh để xử lí logic đằng sau (code behind file) các view. Chúng ta có thể tự tạo trọn vẹn một ứng dụng có tính module tuy nhiên điều này dẫn tới việc ta phải tự xây dựng framework cho ứng dụng của mình. Với việc ra đời của framework asp.net mvc thì mọi thứ đã thay đổi hẳn không còn các tệp mã lệnh xử lí logic đằng sau các view giúp tách biệt hoàn toàn giữa giao diện với logic nghiệp vụ của ứng dụng. Với asp.net mvc framework ta có thể dễ dàng, nhanh chóng phát triển kiến trúc ứng dụng theo hướng phân tầng (n-tier web application) Thiết kế kiến trúc phân tầng Với ứng dụng siêu thị trực tuyến ta sẽ chia thành các tầng như sau: Tầng lưu trữ dữ liệu: Nơi lưu trữ CSDL. CSDL của ứng dụng là CSDL quan hệ Tầng truy cập CSDL (Data Access Layer – DAL): Mã lệnh để lấy dữ liệu , xử lí dữ liệu thô được lưu trong tầng lưu trữ DL. Nhiệm vụ của tầng này là đưa ra các truy xuất CSDL theo logic nghiệp vụ và có tính trực quan hơn cho ứng dụng. Che dấu các chi tiết thâm nhập CSDL ở mức thấp tăng tính an toàn cho CSDL của hệ thống. Tầng nghiệp vụ (Business Logic Layer – BLL): Mã lệnh ở tầng này sẽ thực hiện các nguyên tắc nghiệp vụ , tạo các đối tượng cụ thể thuộc miền nghiệp vụ nhằm thỏa mãn các yêu cầu của ứng dụng. Tầng Logic ứng dụng (Application Logic Layer): Mã lệnh thuộc tầng này sẽ xử lí các tương tác giữa tầng trình diễn (Presentation Layer) với tầng logic nghiệp vụ Tầng trình diễn (Presentation Layer – PL) : Là các đoạn mã lệnh tạo nên những gì mà người dùng thấy ở trên trình duyệt – nó có thể là các dữ liệu đã được định dạng, thực đơn duyệt hệ thống, … Hình 1.1 – Kiến trúc ứng dụng Lựa chọn lưu trữ dữ liệu và thiết kế tầng truy xuất dữ liệu Ở ứng dụng này ta lựa chọn lưu trữ CSDL với SQL server 2008. SQL server 2008 tuy nhiên trong thực tế có thể khách hàng lại muốn sử dụng Oracle server hay IBM DB2 server … vì nhiều lí do như họ muốn tích hợp ứng dụng của bạn vào một project lớn hơn mà project lại dùng Oracle Server để lưu trữ DL nên tầng truy xuất dữ liệu cần được thiết kế sao cho đủ linh hoạt để việc thay đổi diễn ra dễ dàng , nhanh chóng. Tầng truy xất dữ liệu là mã lệnh thực hiện truy vấn CSDL để lấy dữ liệu, cập nhật, chèn, hay xóa dữ liệu. Đây là mã lệnh gần với CSDL nhất , sử dụng tất cả những gì có trong CSDL từ giản đồ các bảng,các stored procdure … cho đến các trường. Mã lệnh truy xuất tới CSDL cụ thể phải được tách biệt với mã lệnh các trang web vì các lí do như: Người viết code cho phần giao diện và người viết code cho phần truy cập CSDL có thể không phải là một. Với những ứng dụng nền tảng web cỡ vừa và lớn thì thường có nhiều lập trình viên tham gia xây dựng. Người xây dựng giao diện sẽ hầu như không quan tâm tới CSDL. Tuy nhiên họ vẫn cung cấp giao diện hiển thị thông tin từ CSDL bởi lẽ tất cả các chi tiết hiển thị đã được gói gọn trong các đối tượng riêng biệt cung cấp việc truy vấn CSDL ở mức cao – trừu tượng hơn. Một vài truy vấn CSDL sẽ được sử dụng ở một số các trang của ứng dụng. Nếu như ta đặt trực tiếp truy vấn vào các trang này mà sau đó ta muốn thay đổi một câu lệnh truy vấn như thay đổi cách thức sắp xếp , hoặc thay đổi các trường dữ liệu ta sẽ phải xem lại toàn bộ code xem nơi nào sử dụng chúng và thực hiện thay đổi. Nếu như ta đưa mã lệnh truy cập CSDL vào một vài lớp trong tầng truy xuất CSDL ta sẽ chỉ phải thay đổi các file này mà không cần quan tâm tới các trang web. Code truy vấn CSDL mà đặt trong các trang web sẽ làm khiến ta khó khăn trong việc thay đổi sang CSDL quan hệ khác Với asp.net mvc framework việc tách biệt tầng truy xuất CSDL là gần như bắt buộc. Tất cả các đối tượng liên quan tới tầng truy xuất CSDL nên được đặt trong thư mục models. Để xử lí việc hỗ trợ lưu trữ dữ liệu linh động với các Database Server khác nhau ta sẽ sử dụng kiểu mẫu thiết kế Provider Model cụ thể là thay vì việc viết trực tiếp các lớp truy cập CSDL (DAL classes) đầu tiên ta sẽ viết lớp trừu tượng (abstract class) và giao diện công khai của các lớp đó (public interface) và cả các phương thức hỗ trợ nếu cần. Mã lệnh thực sự dùng truy vấn CSDL sẽ nằm ở lớp kế thừa trực tiếp từ lớp trừu tượng và lớp này sẽ đưa ra các mã lệnh cụ thể cho các phương thức trong interface của lớp trừu tượng. Lớp trừu tượng được gọi là Provider và đây là lí do vì sao Micorsoft gọi kiểu mẫu thiết kế này là Provider Model . Rõ ràng khi thay đổi Database Server ta chỉ việc thay đổi CSDL , thay đổi các lớp thứ 2 này là xong . Hơn thế nữa với lớp trừu tượng ta biết rõ được phải xây dựng lớp thứ 2 như thế nào và chúng ta không hề phải thay đổi các module khác ngoại trừ module DAL. Trong trường hợp buộc phải thêm các lớp provider mới thì ta có thể biến các lớp provider cũ thành virtual để từ đó cho phép các lớp provider mới có các hàm quá tải (override) các hàm của các provider cũ. Hình dưới đây minh họa mối quan hệ giữa các tầng giao diện, logic nghiệp vụ, truy cập CSDL và lưu trữ CSDL Hình 1.2 – Mối quan hệ giữa các tầng giao diện, logic nghiệp vụ, truy cập CSDL và lưu trữ CSDL Sử dụng LINQ ở tầng truy cập CSDL (DAL) Với .NET Framework 3.5 chúng ta được cung cấp một tính năng mới là LINQ (Language Intergrated Query) . LINQ được thiết kế để cung cấp cách thực hiện truy vấn trên bất kể kiểu collection nào trong .NET Framework bao gồm mảng, dictionaries, lists, XML, và các CSDL,… LINQ có những tính năng đáng để xem xét dù ta có thể đơn giản sử dụng typed data sets hay các thực thể ta tạo ra để thực hiện việc xây dựng tầng truy vấn CSDL theo mong muốn như: Sử dụng các cấu trúc truy vấn giống với SQL trong mã lệnh .NET hay xem đoạn code này: SQL select c.* from Customer as c LINQ var customers = from c in dataContext.Customers select c; 2 câu lệnh trên thực thi cùng một nhiệm vụ là truy vấn thông tin khách hàng từ bảng Customers, tuy nhiên trong cách truy vấn sử dụng LINQ thì dữ liệu được chuyển thành dạng collection, gọi là Iqueryable, giúp ta có thể sử dụng vòng lặp chuẩn foreach . Trong C# ta thấy có từ khóa mới là var – là kiểu dữ liệu nạc danh (kiểu dữ liệu này chỉ được xác định khi biên dịch – trình biên dịch sẽ biết nó có kiểu gì khi biên dịch và thay từ khóa var với tên kiểu đúng của nó) Với LINQ có thể sử dụng kiểu dữ liệu an toàn (type safety) và các truy vấn đa dạng hơn. Hãy xem câu lệnh truy vấn xem mỗi khách hàng trả bao nhiêu cho các đơn đặt hàng của họ trong năm 2008 bằng SQL và LINQ: SQL select c.CustomerId, c.Name as CustomerName, sum(o.TotalPaid) as TotalPaid from Customer as c inner join Orders as o on c.CustomerId = o.CustomerId where o.OrderDate >= ‘1/1/2008’ and o.OrderDate <= ‘12/31/2008’ group by c.CustomerId, c.Name LINQ var customers = from c in dataContext.Customers join o in dataContext.Orders on c.CustomerId equals o.CustomerId where c.OrderDate >= new Date(2008, 1, 1) && c.OrderDate <= new Date(2008, 12, 31) group o by new { c.CustomerId, c.Name } into g select new { CustomerId = c.CustomerId, CustomerName = c.Name, TotalPaid = g.Sum(o => o.TotalPaid) }; Trong ví dụ với LINQ thì trường OrderDate có kiểu là System.DateTime. Vì vậy nếu ta so sánh nó với dữ liệu kiểu chuỗi, hay bất kể một đối tượng nào không phải kiểu DateTime thì trình biên dịch sẽ báo lỗi và cho biết chính xác vị trí lỗi xảy ra đây là một ích lợi khi sử dụng LINQ. Ví dụ dưới đâu sẽ cho thấy với LINQ ta có các truy vấn tiện ích hơn so với SQL ví dụ như lấy một oder có ID = 2, lấy đối tượng OderInformation đổi ngày thêm vào rồi lưu oder này lại vào CSDL . var order = (from o in dataContext.Orders where o.OrderId == 2 select o).FirstOrDefault(); foreach(var orderInformation in order.OrderInformation) orderInformation.DateAdded = DateTime.Now; dataContext.SubmitChanges(); LINQ-to-SQL : Để LINQ có thể được sử dụng ta cần phải khởi tạo model tương ứng . Việc tạo model này hoàn toàn có thể thực hiện bằng cách kéo thả các bảng cũng như store procedure vào phần designer . Các model sẽ được tạo tự động. Việc tạo model như vậy giúp xây dựng ứng dụng nhanh chóng tuy nhiên lại là hạn chế vì chỉ có thể sử dụng với SQL server. Thiết kế tầng logic nghiệp vụ Tầng truy cập CSDL được xây dựng với LINQ-to-SQL trả về các tập hợp của các lớp thực thể chứa các trường của dữ liệu từ bảng DL. Tuy nhiên dữ liệu trả về của tầng này vẫn là dữ liệu thô dù chúng được chứa trong các lớp bởi vì chúng được sinh tự động. Chúng chỉ là nơi chứa các dữ liệu có định kiểu mạnh được sử dụng để truyền dữ liệu giữa các tầng lưu trữ dữ liệu và tầng logic nghiệp vụ. Tầng nghiệp vụ logic sử dụng các dữ liệu này chuyển chúng tới tầng giao diện người dùng . Ở tầng này có thể có thêm kiểm định logic, xây dựng các biểu thức tính toán dựa trên các thuộc tính, chuyển một số thuộc tính thành riêng tư (private) hay chỉ đọc (read-only) thêm các phương thức tĩnh, thực thể để xử lí việc xóa, chỉnh sửa, truy xuất dữ liệu. Việc tạo các dữ liệu hướng đối tượng , định kiểu mạnh tạo ra sự trừu tượng hóa mạnh mẽ cô lập tầng lưu trữ CSDL cung cấp cho lập trình viên phát triển giao diện tập hợp các lớp đơn giản , xong hiệu quả khi sử dụng. Với asp.net mvc framework thì tầng BLL nằm gọn trong các điều khiển (controllers) và các lớp điều khiển bắt buộc phải được đặt trong thư mục controllers giúp tách hẳn tệp code behind ra khỏi views. Các lớp này sử dụng các tập hợp (collections) xử lí dữ liệu thông qua chúng trả lại view tương ứng. Với việc tạo tầng logic nghiệp vụ ở thư mục controllers trong ứng dụng .net mvc thì ta có được một số ích lợi như: Tạo được các kiểm định bộ phận (unit testing ) cho ứng dụng bởi lẽ tấc cả các logic nghiệp vụ được đặt trong thư mục controllers hoặc các thực thể mà ta tạo ra. Không có các trình điều khiển phía máy chủ và như vậy các kiểm định bộ phận không bị lỗi. Bảo mật dễ dàng hơn bởi lẽ tất cả các xử lí được đặt trong các lớp điều khiển ta không còn phải tách biệt các trang cần có cấp phép cao hơn và đưa ra lệnh chứng thực cấp phép với thư mục chứa các trang này. Ta có thể trả về nhiều views từ một hành động trong controller. Với vấn đề bảo mật ta chỉ cần xử lí đơn giản như trong đoạn code sau: [Authorize (Roles = “Admin”)] public ActionResult EditContent (int id, ..) { //logic dùng chỉnh sửa nội dung return View(); } Xây dựng vùng nhớ đệm - caching , sử dụng mạng phân phối nội dung tăng hiệu năng của hệ thống Với những ứng dụng nền tảng web có những dữ liệu ít thay đổi và thường được yêu cầu bởi nhiều người dùng và trong hệ thống siêu thị trực tuyến các dữ liệu như vậy có thể kể tới như danh sách các đầu mục bài báo, đầu mục sản phẩm và các sản phẩm… Để có thể tăng hiệu ứng cho hệ thống với những dữ liệu kiểu này ta có thể tạo vùng nhớ đệm cho chúng và giữ vùng nhớ đệm này ở bộ nhớ trong những khoảng thời gian xác định. Asp.net framework cũng khá mạnh trong việc giúp chúng ta xây dựng , quản lí vùng nhớ đệm ở trong các lớp điều khiển. Hãy xem một ví dụ sau cho thấy việc tạo vùng nhớ đệm và duy trì nó trong 60 giây [OutputCache (Duration = 60)] public ActionResult SomeControllerMethod() { //logic nghiệp vụ } Trong trường hợp hệ thống được truy cập bởi một lượng lớn người dùng mỗi ngày (vài ngàn đến vài chục ngàn) ta có thể tính tới việc sử dụng các mạng phân phối nội dung (Content Delivery Networks) đây là mạng phát tán của các máy chủ (distributed network of servers) giúp ta giải quyết vấn đền quá tải truy cập nội dung của hệ thống, giúp người dùng truy cập nội dung hệ thống nhanh hơn . Các mạng này thực hiện công việc phôn phối nội dung thông qua mạng của các máy chủ DNS hướng yêu cầu của người dùng tới một máy chủ có sẵn nội dung người dùng cần và gần người này nhất. Nội dung cần phân phối có thể là các file ảnh, javascript, css, tài liệu, phim ảnh , âm thanh … với hệ thống siêu thị trực tuyến này thì các tệp nội dung được đặt trong thư mục Content việc đưa tất cả các file nội dung vào thư mục này sẽ rất phù hợp với cơ chế làm việc của CDN ở chỗ để CDN hoạt động ta cần phải cài phần mềm tương ứng vào máy chủ web chứa hệ thống và cấu hình để phần mềm này biết cụ thể vị trí của nội dung cần phân phối việc đưa nội dung cần phân phối vào một thư mục sẽ dễ dàng cho việc cấu hình và quá trình lookup của phần mềm này. Về mặt giá cả thì giải pháp sử dụng CDN sẽ rẻ hơn nhiều so với việc thuê đường truyền có băng thông lớn hơn. Tầng trình diễn (UI hay Views) Tầng trình diễn tương ứng với các trang Web Forms duy chỉ có điều là không có các tệp mã lệnh đằng sau mỗi web form. Ta đã biết các tệp mã lệnh đó được thay thế bằng những lớp điều khiển (Controller classes) . Tuy nhiên còn các server control (được cung cấp bởi Microsoft , hoặc các hãng thứ 3) vẫn thường được sử dụng trong các asp.net web forms trước kia thì sao? Trên thực tế những control kiểu này không còn cần thiết trong các web forms nữa. ASP.NET MVC framework đem đến rất nhiều lựa chọn thay thế cho các control đó mà trong hệ thống siêu thị trực tuyế