2013-06-17 30 views
6

Tôi là exploring các mẫu MV * khác nhau và nhận thấy rằng MVP được sử dụng rất nhiều trong các ứng dụng .Net nhưng hầu như không có nơi nào khác.
Khung lớn duy nhất khác có vẻ kết hợp nó là GWT nhưng chỉ ở một số phần.ví dụ ứng dụng Model-View-Presenter tại nodejs

  1. Tại sao MVP lại là một điều siêu nhỏ (tại sao nó gần như không phổ biến ở các ngôn ngữ khác)?
  2. Có một ứng dụng/dự án nodejs sử dụng MVP (tốt nhất là với nguồn i có thể xem) không?
+1

có thể chỉ là trường hợp của http://stackoverflow.com/questions/327955/does-functional-programming-replace-gof-design-patterns này (trong .net) – mkoryak

+0

Java SWT & Swing là MVP-ish, Tôi không thể nhớ nếu CakePHP là một MVC hoặc cụ thể hơn cách tiếp cận MVP - nó đã được một thời gian rất dài kể từ khi tôi làm việc với nó.Và đối với Javascript nói chung có một vài khung làm một mô hình thiết kế MV * phía máy khách mà tôi có thể rattle off. Tuy nhiên, tôi cho rằng bạn đang tìm kiếm thứ gì đó phía máy chủ, có lẽ một cái gì đó hoạt động với một ORM như phần tiếp theo, đúng không? – hoonto

+0

vâng tôi đang tìm một ví dụ MVP phía máy chủ. Không thực sự quan tâm về những gì ORM nó sẽ sử dụng, nếu có. Về phía khách hàng, tôi nghĩ rằng xương sống đến gần với một MVP – mkoryak

Trả lời

1

Không có bất kỳ tuyệt vời ví dụ về MVP nào trong nútjs. Chúng tôi đã thực hiện một loạt nghiên cứu và triển khai thực hiện TODO app bằng cách sử dụng mẫu MVP trong nodejs.net.

Nó chưa hoàn hảo, nhưng tôi nghĩ nó lấp đầy một khoảng trống. Yêu cầu kéo được hoan nghênh.

https://github.com/EchoGlobalLogistics/mvp

-1

Chắc chắn có thể sử dụng nút theo kiểu MV *. Dưới đây là một vài thực sự tốt câu hỏi/câu trả lời mà tôi đã sử dụng như một hướng dẫn khi cơ cấu lại các ứng dụng của tôi:

How to structure a express.js application?

ExpressJS How to structure an application?

Có một vài khuôn khổ cho Node cũng có MV * dựa :

  • Matador
  • mới Sails.js (Dựa tắt của Rails)
  • Hầu hết các khung công tác nút được xây dựng trên Express.js, có thể được điều chỉnh thành MV * như được giải thích trong các câu trả lời ở trên.

Dưới đây là sample app được xây dựng trên biểu thức tinh khiết theo kiểu MV *.

+0

tất cả những Khung MVC. – mkoryak

0

tl; dr Nhìn vào khung flatiron đặc biệt là tại plugin CLI. Ngoài ra bài viết này https://blog.nodejitsu.com/writing-cli-apps-with-flatiron và phần ví dụ của nó.

Trả lời câu hỏi đầu tiên của bạn, tôi muốn nói rằng MVP không phải là tất cả những gì mà microsoft, thậm chí bài viết wikipedia cũng tuyên bố điều đó. Nó chỉ là nhà thiết kế ngôn ngữ trong Microsoft đã chọn mô hình ẩn các chi tiết của việc triển khai widget.

Khi bạn là người dùng tương tác với tiện ích, có rất nhiều nội dung đang diễn ra. Và ở một mức độ nào đó, có vẻ như chính widget đó có thể được xem như một ứng dụng nhỏ với mô hình logic kinh doanh riêng của nó, với quan điểm và bộ điều khiển riêng của nó. Hãy xem ví dụ như một trình đơn thả xuống: nó có một tập hợp các phương thức để vẽ một số hình chữ nhật trên màn hình, nó cũng có các phương thức để trình bày một danh sách các giá trị dưới dạng văn bản, và khi bạn bấm vào một số mục có thay đổi màu nền và văn bản diễn ra theo các quy tắc nhất định (suy nghĩ logic nghiệp vụ). Nền tảng .Net của Microsoft có rất nhiều việc phải làm với giao diện người dùng. Đây là lý do tại sao nó rất quan trọng để chọn một mô hình mà sẽ phù hợp với mục đích đó tốt hơn.

Nút mặt khác là nền tảng phụ trợ hoàn toàn, nó không phải là khuôn khổ để tạo ứng dụng web. Tôi không nói rằng bạn không thể hoặc không nên tạo một ứng dụng web với nó. Những gì tôi nói là một vai trò của mã Node trong ứng dụng web nên được giới hạn IO. Nhận yêu cầu, gửi phản hồi, gửi/nhận dữ liệu đến/từ kho lưu trữ, có thể phân tích cú pháp. Và bạn có thể tạo một khung công tác để tạo các ứng dụng web trên đỉnh của khóa học.

Cố gắng theo dõi MVP trong khi tạo ứng dụng web có thể bạn sẽ muốn có Người trình bày càng gần càng tốt để hiển thị vật dụng thực tế. Trong trường hợp các ứng dụng web sẽ là một trình duyệt.Nút trong trường hợp này sẽ đóng vai trò của máy chủ REST (hoặc bất kỳ cách trao đổi dữ liệu ưu tiên nào khác có thể được sử dụng thay vì REST ở đây).

Có một lớp ứng dụng khác nhau mà Nút có thể được sử dụng để tạo. Đó sẽ là ứng dụng CLI. Đây là nơi bạn có thể tạo các ứng dụng bằng MVP và có Presenter in Node. Để tìm các ví dụ, tôi khuyên bạn nên xem trang web phẳng framework có hỗ trợ tốt cho việc tạo ứng dụng cli và cũng có vài ví dụ về các ứng dụng như vậy: https://blog.nodejitsu.com/writing-cli-apps-with-flatiron.

Cũng có https://github.com/mscdex/node-ncurses. Điều này có thể cung cấp cho bạn một cơ hội để "cuộn MVP của riêng bạn". Đó là thực hành tốt khi mục tiêu của bạn là khám phá điều.

3

Để nói về lý do của nó trông giống như một điều Microsoft, có thể được bắt nguồn từ các quyết định thiết kế ít nhất 2 công ty lớn và các khung tương ứng của họ. Microsoft kết hợp MVP vào .NET. Trong khi Apple chọn cho MVC trong ca cao.

Đối với JavaScript, hãy nhìn vào khuôn khổ gần đây Riot.js https://moot.it/blog/technology/riotjs-the-1kb-mvp-framework.html

Mặc dù nó không phải là đặc biệt một "khuôn khổ Node.js", đó là một ví dụ về một cái gì đó di chuyển theo hướng hạn này của "đẳng cấu JavaScript" (Lớp JavaScript chạy trên máy khách + máy chủ), và những gì có thể được đưa vào bảng bằng cách thu hút nhiều kỹ sư từ nhiều kinh nghiệm và nguồn gốc khác nhau.

Từ bài viết rằng:

mô hình Riot xác định ứng dụng của bạn. Đó là logic kinh doanh của bạn tiếp xúc với thế giới bên ngoài với một API tư duy tốt. Một đơn vị hoàn toàn bị cô lập, có thể kiểm tra có thể chạy trong trình duyệt và máy chủ (node.js).

Từ kinh nghiệm của tôi, xin vui lòng tha thứ cho tuyên bố chung của tôi, lý do tại sao MVP không được thấy nhiều trong công nghệ này là vì nhiều người chưa từng nghe, quên nó, hoặc đơn giản là don Không thấy sự khác biệt nhiều từ những gì một "Controller" là gì và những gì một "Presenter" là. Điều này không có nghĩa là không có sự khác biệt, và Tero Piirainen đã vạch ra những điều khá tốt trong bài viết của Riot.js cho những người đến từ các khung công tác JavaScript MVC khác.

0

Gần đây, chúng tôi đã sử dụng các nút có biểu thức để xây dựng một ứng dụng web. Trong khi làm việc trên nó, chúng tôi xây dựng một khuôn khổ nhỏ trên đầu trang của thể hiện để tổ chức mã của chúng tôi tốt hơn. Khung này buộc bạn phải viết các trình xử lý riêng biệt (Trình bày) cho các yêu cầu GET và Lệnh cho các yêu cầu POST. (Xem martinfowler.com/bliki/CQRS.html). Khung công tác cũng buộc mẫu Post-Redirect-Get (en.wikipedia.org/wiki/Post/Redirect/Get) bằng cách chỉ cho phép chuyển hướng từ Lệnh. Gói npm là expressmvp (https://www.npmjs.org/package/expressmvp).

Các vấn đề liên quan