01/10/2018, 17:28

Web Application Projects so với Web Site Projects

Trong Visual Studio bạn có thể tạo Web application projects hoặc Web site projects. Mỗi loại project có những ưu điểm và nhược điểm, và việc hiểu được những sự khác nhau giữa chúng rất có ít cho việc chọn loại project tốt nhất phù hợp với loại bạn cần. Bạn phải chọn loại project thích hợp trước khi ...

Trong Visual Studio bạn có thể tạo Web application projects hoặc Web site projects. Mỗi loại project có những ưu điểm và nhược điểm, và việc hiểu được những sự khác nhau giữa chúng rất có ít cho việc chọn loại project tốt nhất phù hợp với loại bạn cần. Bạn phải chọn loại project thích hợp trước khi bạn tạo project, bởi vì thật là không dễ dàng chúc nào khi bạn chuyển từ 1 loại project này sang loại project khác.

Ghi chú: trong một vài hoàn cảnh bạn không có sự chọn lựa nào. Ví dụ, nếu bạn muốn tạo một ASP.NET MVC application, bạn phải sử dụng Web application project.

Chủ đề này bao gồm các phần sau:

  • Scenarios: tạm dịch là các ngữ cảnh, các hoàn cảnh
  • Summary of Differences: tóm tắc sơ lược những khác biệt
  • Project File Structure: cấu trúc tập tin của project
  • Compilation: trình biên dịch
  • Deployment: sự triển khai

Góc Kinh Nghiệm sẽ không chuyển các cụm từ trên (và một từ khác liên quan) sang tiếng Việt, và giữ nguyên từ tiếng anh trong toàn bài viết này. Mục đích việc giữ nguyên từ tiếng Anh là nhằm giữ sát nghĩa của các cụm từ rất phổ biến này.

Scenarios:

Scenarios mà ở đó Web application projects là một sự lựa chọn ưu tiên bao gồm những yếu tố sau đây:

  • Bạn muốn có thể chỉnh sửa code mà không cần dừng việc debugging lại.
  • Bạn muốn chạy các unit tests trên code, nó ở trong những class files được kết hợp với các trang ASP.NET.
  • Bạn muốn tham chiếu đến các class mà nó được kết hợp với các trang (pages) và các user controls từ những class độc lập.
  • Bạn muốn thiết lập mối quan hệ phụ thuộc giữa nhiều Web project.
  • Bạn muốn trình biên dịch tạo một single assembly cho toàn bộ trang web.
  • Bạn muốn quản lí toàn bộ tên assembly và số version được tạo ra từ trang web.
  • Bạn muốn sử dụng MSBuild hoặc Team Build để biên dịch project. Ví vụ, bạn có thể muốn thêm các bước pre-build và post-build.
  • Bạn muốn tránh việc đẩy source code của project lên server.
  • Bạn muốn sử dụng những tool (có sẵn trong Visual Studio 2010) để deploy project một cách tự động.

Scenarios mà Web site applications là một sự lựa chọn ưu tiên bao gồm các yếu tố sau đây:

  • Bạn muốn gồm cả code C# và code Visual Basic trong một Web project (mặc định, một Web application được biên dịch dựa trên những thiết lập ngôn ngữ trong tập tin project, những ngoại lệ (exceptions) có thể thực hiện được, nhưng tươi đối khó khăn).
  • Bạn muốn mở site trong Visual Studio và cập nhật real time bằng cách sử dụng  FTP
  • Bạn không muốn biên dịch hoàn toàn project để triển khai nó.
  • Nếu bạn precompile trang web, bạn luốn trình biên dịch tạo ra nhiều assembly cho toàn bộ trang web, nó có thể gồm một assembly cho mỗi trang (page) hoặc mỗi user control, hoặc một hay nhiều essemblies cho mỗi thư mục (folder).
  • Bạn muốn có thể cập nhật các file một cách độc lập riêng lẽ bằng cách copy các version mới vào server, hoặc bằng cách chỉnh sửa, cập nhật trực tiếp các file trên server.
  • Nếu bạn precompile trang web, bạn muốn có thể cập nhật các trang ASP.NET Web pages (các tập tin .aspx) một cách độc lập mà không cần phải biên dịch lại toàn bộ Web site.
  • Bạn muốn giữ source code của bạn trên server bởi vì bạn cần nó để phục vụ cho việc backup (sao lưu).

Summary of Differences:

Bảng bên dưới tóm tắt lại những điểm khác biệt của Web application projects và Web site projects.

Area Web application projects Web site projects
Project file structure Một Visual Studio project file (.csproj hoặc .vbproj) chứa thông tin về project, ví dụ như là danh sách các file được include trong project, và bất cứ các references (tham chiếu) giữa các project. Không có project file (.csproj hoặc .vbproj). Tất cả files trong thư mục được include tự động vào site.
Compilation
  • Bạn biên dịch toàn bộ code trên máy tính, nó được sử dụng cho việc deployment hoặc quản lí source
  • Mặc định, việc biên dịch code files (bao gồm .aspx và .ascx files) tạo ra một single assembly.
  • Source code được biên dịch một cách cụ thể và tự động bởi ASP.NET trên server lần đầu tiên request được nhận sau khi site được install hoặc update.
Bạn có thể biên dịch trước site (trên máy tính deployment hoặc trên server) 
  • Mặc định trình biên dịch tạo ra multiple assemblies.
Namespaces Mặc định các namespace cụ thể được thêm vào pages, controls và classes. Mặc định các namespace cụ thể không được thêm vào pages, controls và classes, nhưng bạn có thể thêm một cách thủ công.
Deployment
  • Bạn copy assembly vào server. Assebly được tạo ra bởi việc biên dịch ứng dụng.
  • Visual Studio cung cấp các tools tích hợp với các tools của IIS Web deployment để tự động các deployment tasks.
  • Bạn copy các source files của ứng dụng đến máy tính có cài IIS.
  • Nếu bạn precompile trang web trên máy tính deployment, bạn copy các assemblies được tạo ra bởi trình biên dịch đến IIS server.
  • Visual Studio cung cấp sẵn các tools phục vụ việc deployment, nhưng chúng không có tự động thực hiện các các deployment tasks như các tools có sẵn của Web application projects.

Project File Structure:

Web application project sử dụng Visual Studio project files (.csproj hoặc .vbproj) để mà theo dõi thông tin của project. Với những task quản lí đó, nó dễ xác định files nào được include (thêm vào) hoặc bị exclude (loại ra) khỏi project và vì thế các files được biên dịch trong suốt quá trình build.

Còn đối với Web site project, tất cả files trong folder structure được tự động include vào Web site. Nếu bạn muốn exclude (loại ra) một vài file từ trình biên dịch, bạn phải remove (gở bỏ) file từ thư mục Web site project hoặc là thay đổi tên file mở rộng (đuôi mở rộng) thành file có đuôi mở rộng mà không được biên dịch hoặc không hỗ trợ bởi IIS.

Bên dưới là ưu điểm của việc sử dụng project files trong Web application projects:

  • Dễ dàng remove (loại bỏ) các tập tin tạm (temporarily files) ra khỏi site nhưng vẫn đảm bảo không mất dấu các file bị loại bỏ, bởi vì chúng vẫn còn trong folder structure. Ví dụ: nếu một page (trang) nào đó chưa sẵn sàng cho việc deployment, bạn có thể exclude (loại bỏ) tạm thời page đó lúc build mà không cần xóa page đó từ folder structure. Bạn có thể deploy (triển khai) assemply được biên dịch, và sau đó include file vào project một lần nữa. Điều này cực kỳ quan trọng nếu như bạn làm việc với một kho source control.

Bên dưới là ưu điểm của việc sử dụng folder structure mà không cần project files trong Web site projects:

  • Bạn không cần phải quản lý những cấu trúc project dành riêng trong Visual Studio. Ví dụ, bạn có thể copy files vào project hoặc xóa files bằng việc sử dụng Window Explorer.

Compliation:

Đối với Web application projects, bạn thường build project trong Visual Stuido hoặc sử dụng ASP.NET batch complier trên máy tính mà nó không phải là IIS server. Tất cả các code-behind class files và class files độc lập trong project được biên dịch thành single assembly, sau đó chúng được đặt vào thư mục Bin của Web application project. (.aspx và .ascx files được biên dịch một cách tự động tương tự với cách được làm trong Web site projects.)

Đối với Web site projects, bạn không cần phải biên dịch project một cách thủ công. Web site projects được biên dịch một cách tự động bởi ASP.NET (trên cả demployment computer và production IIS Server). Bạn có thể chọn chế độ biên dịch, giữa chế độ batch compilation – tạo ra một assembly cho mỗi thư mục (folder), và chế độ fixed compilation – tạo ra một assembly cho mỗi page (trang) hoặc mỗi user control.

Bên dưới là những ưu điểm của compilation model cho Web application projects:

  • Bạn có thể sử dụng MSBuild để tạo ra custom batch-compilation process.
  • Dễ dành xác định những thuộc tính của assemply, ví dụ như name (tên) và version (phiên bản).
  • Việc biên dịch trước để đảm bảo rằng người dùng không phải đợi site biên dịch trên server. (Nếu site rất lớn, việc biên dịch không ngừng thay đổi – dynamic compilation, của Web site project có thể mất một lượng tớn chi phí và thời gian. Dynamic compilation xuất hiện khi một request cho site resource được nhận sau khi update site và request mà thực hiện biên dịch có thể được trì hoản trong khi required resource được biên dịch. Nếu việc trì hoản không được chấp nhận, bạn có thể precompile site. Tuy nhiên, một vài ưu điểm của dynamic compile sẽ bị mất.)
  • Bạn hoàn toàn làm chủ được nơi bạn đặc các code files trong project folder structure và bạn biết những classes trong project tham chiếu qua lại với nhau như thế nào. (Dynamic compilation, nó yêu cầu nhiều source code cho các classes mà nó được sử dụng trong toàn bộ site phải được để trong thư mục App_Code. Bạn không thể tham chiếu đến 1 page hoặc 1 user control class từ một class trong App_Code.)

Bên dưới là những ưu điểm của compilation model cho Web site applications :

  • Bạn có thể test những trang chỉ định mà không cần phục thuộc vào trạng thái của các trang khác. Đó là bởi vì việc chạy một trang độc lập không yêu cầu toàn bộ site phải được biên dịch thành công, chỉ cần một page (trang) và tất cả các thành phần của mà trang đó phục thuộc, như là code trong thư mục App_Code hoặc Global.asax file. (Trong một Web application project, nếu có lỗi biên dịch bất cứ nơi nào trong site, bạn không thể tạo assembly và do đó bạn không thể test phần nào cho dù một phần nào đó của site đã được biên dịch.)
  • Dễ dàng cập nhật site. Bạn có thể cập nhật các code files riêng lẻ trên server mà không cần biên dịch lại toàn bộ site. Bạn có thể cập nhật những file một cách riêng rẽ độc lập, các files đó đã sẵn sàn cho việc deployment thậm chí những file khác chưa sẵn sàn bởi vì biên dịch còn lỗi. Bạn cũng có thể mở Web site trên IIS server trực tiếp trong Visual Studio và cập nhật Web site lúc real time.
  • Việc precompilating tạo multiple assemblies có thể có ưu điểm trong một vài scenarios. Một ví dụ cụ thể là một site có nhiều pages đã mất code. Và hầu hết các pages đó hiếm khi được request và chỉ một vài được sử dụng thường xuyên. Nếu bạn biên dịch site này thành multiple assemblies, server chỉ load những assemplies được request cho những request hiện tại. Nếu một page không được request thì assembly tương ứng của nó không được load.

Deployment:

Để deploy (triển khai) một Web application project, bạn copy assembly được tạo ra bởi việc biên dịch project đến IIS server. Ngược lại, để deploy Web site project, bạn copy các project source files đến IIS server.

Dưới đây là một vài ưu điểm của việc deployment cho Web application projects:

  • Bạn có thể tránh việc deployment những source code lên IIS server. Trong một vài scenarios, ví dụ như là việc chia sẽ hosting, bạn phải quan tâm đến việc không được quyền truy cập vào source code trên IIS server. (Đối với Web site project, bạn có thể tránh sự rủi ro này bằng việc precompilating trên máy tính deployment  và triển khai các assemplies được tạo ra thay vì source code. Tuy nhiên, trong trường hợp đó, bạn sẽ mất một vài tiện ích của việc cập nhật site dễ dàng.)
  • Việc deployment thường có liên quan đến những tasks khác, thêm vào nữa là bạn phải copy các assemblies hoặc code đến server. Ví dụ, những scripts của database phải chạy trên server, và các connection strings (những chuỗi kết nối) trong tập tin Web.config cũng có thể bị thay đổi cho server. Visual Studio cung cấp các tools như là one-click mà nó làm việc với Web application projects để tự động các tasks này. Những tools này không có sẵn cho Web site projects

Dưới đây là ưu điểm của deployment cho Web site projects:

  • Nếu bạn có một thay đổi nhỏ trên Web application, bạn không cần phải deploy lại toàn bộ ứng dụng. Thay vào đó, bạn chỉ cần copy một hay nhiều files thay đổi vào server là xong. Bạn cũng có thể sử file trực tiếp trên server. (Bởi vì các code files của Web application project được biên dịch thành single assembly, bạn phải deploy lại toàn bộ site trong khi bạn chỉ có thay đổi tí xíu, trừ khi chỉ thay đổi trên .aspx hoặc ascx file.)

Tham khảo từ MSDN

Góc Kinh Nghiệm chúc các bạn thành công!  :roll:


0