Tôi có nên sử dụng cả AngularJS và ASP.NET MVC không?


58

Tôi bắt đầu học AngularJS và ASP.NET MVC, nhưng không chắc tại sao lại sử dụng cả hai trong cùng một dự án?

Cả hai đều không phải là khung MVC? Tôi có nên sử dụng cả hai trong cùng một ứng dụng không? Không phải cái này hay cái kia sao?

Câu trả lời:


74

Nếu bạn đang xây dựng một ứng dụng trang đơn (SPA) , thì có lẽ bạn không cần "MVC" trong ASP.NET MVC . Các khung nhìn, đặc biệt là các khung nhìn động, có khả năng được phân phối / thao tác phía máy khách. Tay cầm góc cạnh mà ổn.

Nhưng có lẽ bạn không muốn một SPA 100%. Rồi sao? Hãy tưởng tượng thay vì 10 trang, nhưng 10 trang rấtnăng động. Sau khi người dùng đăng nhập, có một huy hiệu người dùng nhỏ ở góc bên phải. Điều đó không năng động. Nó chỉ cho thấy một vài điều tiện lợi như "điểm số" của người dùng và ảnh tự sướng mới nhất của họ. Bạn lưu trữ những thứ tiện lợi để chúng có thể dễ dàng lấy ra. Bây giờ, bạn có thể đi hai cách với điều này. Nếu bạn là người theo chủ nghĩa thuần túy MVC phía máy khách, bạn chỉ cần tìm nạp dữ liệu huy hiệu sau khi tải trọng HTML ban đầu được phân phối, giống như tất cả các dữ liệu khác. Nhưng có lẽ bạn không phải là người theo chủ nghĩa thuần túy. Có lẽ bạn trái ngược với một người theo chủ nghĩa thuần túy. Có lẽ bạn là một người không kiên nhẫn. Vì vậy, thay vì phân phối HTML ban đầu, phân phối một số JavaScript sẽ gửi lại cho máy chủ của bạn, đăng qua JavaScript để lấy dữ liệu huy hiệu và sau đó hợp nhất dữ liệu đó vào chế độ xem thông qua MVC phía máy khách,đó là HTML ban đầu của bạn. Sau khi HTML ban đầu của bạn được phân phối, bạn tiếp tục với các trò chơi MVC phía máy khách điển hình của mình.

Vì vậy, ... MVC trên máy chủ và trên máy khách chỉ là một cách thuận tiện để tổ chức mã từng là một mớ hỗn độn trong năm 2001. Bạn không phải chọn cái này hay cái khác. Bạn có thể chọn cả hai. Cấp, bạn càng làm sau khi HTML ban đầu được phân phối, bạn càng cần ít MVC phía máy chủ. Tuy nhiên, nó sẽ ở đó cho bạn nếu bạn cần nó. Ví dụ, tôi đã làm việc trên một ứng dụng ASP.NET MVC / Angular trong đó các mẫu Angular bên ngoài thực sự có thể là .NET MVC ActionResult. Điều đó có nghĩa là bộ điều khiển máy chủ của bạn có thể hợp nhất dữ liệu vào dạng xem của nó, phân phối nó tới Angular dưới dạng mẫu và bộ điều khiển của Angular có thể hợp nhất dữ liệu của nó vào dạng xem. Tôi không nói rằng đây là một ý tưởng tốt, nhưng nó chỉ cho thấy rằng một dạng của MVC không làm cho cái kia trở nên lỗi thời.

Ngoài ra, cho dù bạn triển khai Angular như thế nào, bạn sẽ cần một cách để cung cấp HTML ban đầu đó, các mẫu và quan trọng nhất là dữ liệu. Tại sao không sử dụng một nền tảng làm cho nó dễ dàng? Có rất nhiều, nhưng .NET MVC không hề bị chê. Giống như tôi đã nói, bạn có thể biến HTML ban đầu và các mẫu Angular bên ngoài thành kết quả của một hành động MVC, nhưng tốt hơn nữa, bạn có thể sử dụng API Web của .NET để phân phối dữ liệu. API Web cũng ngon như compote apricot.

Tóm tắt: MVC chỉ là một mô hình. Bạn có thể muốn sử dụng mẫu đó trên bất kỳ số lớp vật lý nào. Nó không thể được sử dụng hết. Sử dụng nó một cách tự do nếu nó có ý nghĩa. Bên cạnh đó, Angular có thể không phải là MVC (vì vậy những người quan tâm đến những thứ này), vì vậy hãy sử dụng nó với một công cụ có "MVC" trong tên. Địa ngục, ngay cả khi nó là MVC, trộn và kết hợp như mong muốn.


3
Phản ứng tuyệt vời. Cảm ơn rất nhiều vì lời giải thích của bạn +1
Natalie

Bạn có thể cho tôi biết, ví dụ nếu có một api web cung cấp cho tôi dữ liệu và tôi muốn hiển thị dữ liệu này trong lưới, tôi có thực hiện lặp và tạo khuôn mẫu bằng Angular hoặc MVC không? Tôi có gọi dịch vụ api web bằng cách nào không? Làm thế nào để bạn quyết định từ khi bắt đầu dự án theo cách bạn sẽ đi?
Natalie

1
@Nirthie Nếu dữ liệu từ API Web, bạn có thể tìm nạp phía máy khách. Điều này có nghĩa là bạn ràng buộc trong Angular, không phải .NET MVC. Bạn không lặp lại rõ ràng. Bạn liên kết dữ liệu vào lưới / bảng của mình bằng ngRepeat . Để tìm nạp dữ liệu, bạn có thể sử dụng mô-đun $ http và gọi điểm cuối API Web của bạn. Đối với việc quyết định sử dụng phương pháp nào, điều đó thật kỳ quặc. Không có câu trả lời trắng đen. Bạn phải thử nghiệm, đánh giá và làm theo bản năng của mình.
Scant Roger

... Một lời cảnh báo. Nếu trước đây bạn chưa sử dụng khung JavaScript hoặc Angular đầy đủ dịch vụ khác, bạn sẽ cần dành nhiều giờ để học các sợi dây. Họ không nhất thiết phải đơn giản. Tôi có thể đảm bảo với bạn rằng họ làm cho cuộc sống của bạn dễ dàng hơn về lâu dài. Làm việc chăm chỉ. Gắn bó với nó. Bạn sẽ làm rất tốt.
Scant Roger

1
@ScantRoger Tôi xin lỗi, nhưng câu trả lời của bạn không làm rõ mọi thứ cho tôi. Nếu tôi đang sử dụng khung công tác phía máy chủ MVC, trong đó Chế độ xem không rõ ràng, làm cách nào để liên kết Angular với nó? Máy chủ (API web) đã chứa định nghĩa Mô hình và Trình điều khiển. Vì vậy, nếu tôi sử dụng Angular, tôi lại bị áp đặt MVC. Vì vậy, cuối cùng nó là MCVCM ...? (Định nghĩa Model & Trình điều khiển cả ở phía máy khách và phía máy chủ) Hoặc đó là lý do tôi không nên sử dụng khung MVC phía máy khách, như Angular, nếu tôi đã sử dụng khung MVC cho API Web của mình
Abdul

17

ASP.NET MVC là một khung công tác phía máy chủ; nó không quan tâm bạn sử dụng thư viện JavaScript nào. AngularJS là một thư viện phía máy khách, không quan tâm công nghệ phía máy chủ nào cung cấp năng lượng cho trang web. Nó có thể là Python, ASP.NET MVC hoặc thậm chí là một tập tin HTML tĩnh cũ được lưu trữ trực tiếp trên đĩa.

ASP.NET MVC và AngularJS đều tương thích, và có rất nhiều dự án ngoài đó sử dụng chúng cùng nhau.

Bạn có cần sử dụng cả hai? Không hẳn vậy. Nó phụ thuộc hoàn toàn vào nhu cầu của dự án của bạn.

  • Nếu trang web của bạn là động, bạn phải sử dụng một số kịch bản phía máy chủ. Bạn có thể sử dụng ASP.NET và thực tế là bạn đang sử dụng AngularJS sẽ không làm cho mã phía máy chủ của bạn có nhiều MVC hơn. Nếu bạn muốn có thể cấu trúc ứng dụng phía máy chủ của mình dưới dạng MVC, bạn sẽ chọn ASP.NET MVC.

  • Tương tự, thực tế là bạn đang sử dụng ASP.NET MVC không ngụ ý bất cứ điều gì về cấu trúc mã phía máy khách của bạn. Bạn có thể đặt tất cả JavaScript của mình vào một tệp mà không cần suy nghĩ về cấu trúc và hài lòng với điều đó (cho đến khi dự án bắt đầu phát triển). Một lần nữa, AngularJS trình bày bản thân như một cách để cấu trúc ứng dụng của bạn ở phía máy khách.


Lưu ý bên lề: bạn đã gắn thẻ câu hỏi của mình ASP.NET MVC 3. Trừ khi đây là dự án cũ mà bạn phải duy trì hoặc bạn có các ràng buộc cụ thể khi lưu trữ ứng dụng trên các máy chủ cũ không được cập nhật trong bốn năm qua, bạn có thể sử dụng ASP .NET MVC 4 hoặc 5 thay thế.


1
cảm ơn MainMa. Tôi biết rằng AngularJS là phía máy khách và MVC là phía máy chủ. Tôi cũng biết rằng các thư viện khác như tay lái, knout có thể được sử dụng trong MVC.NET và Angular có thể được sử dụng trong các ứng dụng php, java. Điều đang hỏi là tại sao phải sử dụng cả hai cùng nhau, vì cả hai đều làm cùng một thứ là "MVC", nhưng một là phía máy khách và một là phía máy chủ. Tại sao trộn các khung MVC ở phía máy khách và phía máy chủ? Chúng ta không thể làm một ứng dụng chỉ là ứng dụng Angular sao? Hoặc một ứng dụng chỉ là ứng dụng MVC.net?
Natalie

@Nirthie: Tôi hiểu rồi. Tôi đã chỉnh sửa câu trả lời để cung cấp thêm thông tin về điều đó. Một câu trả lời ngắn gọn là bạn kết hợp hai khung công tác đó trong các dự án trong đó có ý nghĩa để có một cấu trúc cụ thể ở cả hai phía máy chủ và máy khách.
Arseni Mourzenko

Bạn có thể cho tôi biết, ví dụ nếu có một api web cung cấp cho tôi dữ liệu và tôi muốn hiển thị dữ liệu này trong lưới, tôi có thực hiện lặp và tạo khuôn mẫu bằng Angular hoặc MVC không? Tôi có gọi dịch vụ api web bằng cách nào không? Làm thế nào để bạn quyết định từ khi bắt đầu dự án theo cách bạn sẽ đi?
Natalie

Tôi có những câu hỏi tương tự trong tâm trí của tôi. Tôi không thể tìm thấy lý do để sử dụng asp.net MVC. Ý tôi là có vẻ như API Web Asp.net ở phía máy chủ và Angular ở phía máy khách là đủ. Nhưng tôi đã nghĩ trước; API Web = Lớp truy cập dữ liệu, Asp.Net MVC = Lớp logic nghiệp vụ, lớp Angular = UI. Nhưng từ phía Angular, chúng tôi chỉ có thể thực hiện các cuộc gọi API Web vì vậy chúng tôi không thể sử dụng phía máy chủ Asp.Net MVC. Tôi nghĩ rằng chúng ta cần một ví dụ tốt tại sao chúng ta có thể cần sử dụng Asp.Net MVC.
Salim

9

Nếu bạn đang sử dụng visual studio, có một mẫu trang web MVC 'ứng dụng một trang' mới bao gồm các bộ điều khiển Api góc và MVC Web.

Điều này hoạt động tốt bởi vì mã phía máy chủ MVC của bạn cung cấp các điểm cuối json cho mã phía máy khách góc cạnh để gọi.

Ngoài ra, bạn có thể sử dụng bộ điều khiển MVC để phục vụ chế độ xem hoặc chế độ xem html cơ bản cho ứng dụng trang đơn của mình. điều này mang lại cho bạn sức mạnh của việc tạo phía máy chủ, ủy quyền, chuyển hướng, xử lý lỗi, v.v.

Thường thì bạn sẽ muốn một lượng nhỏ máy chủ tạo html / javascript ngay cả trên một ứng dụng trang, những thứ như url điểm cuối cho các môi trường khác nhau, ngôn ngữ khác nhau hoặc thậm chí trang xác thực kỳ lạ có thể dễ dàng hơn để làm phía máy chủ.


1
Khi tạo mẫu SPA tiêu chuẩn trong VS 2015 CE, tôi thấy bootstrap, jquery, knockout, reply và sammy trong thư mục script, nhưng không có góc cạnh. Tui bỏ lỡ điều gì vậy?
TK-421

2

3 năm sau, sử dụng API Web ASP.NET để phục vụ dữ liệu của bạn và Angular (js hoặc mới hơn) để cấu trúc ứng dụng của bạn ở phía máy khách. Nếu bạn đang tạo một trang web tĩnh thì chỉ cần sử dụng ASP.NET MVC.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.