10

Tôi đang thực hiện một ứng dụng emberjs khá phức tạp và liên kết nó với một phụ trợ API.EmberJS: Phân tách mối quan tâm tốt cho Mô hình, Cửa hàng, Bộ điều khiển, Số lượt xem trong một ứng dụng khá phức tạp?

Các cuộc gọi API thường không được gắn với bất kỳ mô hình cụ thể nào, nhưng có thể trả lại các đối tượng thuộc nhiều loại khác nhau trong các phần khác nhau của phản hồi, ví dụ: một cuộc gọi đến API sự kiện sẽ trả về các sự kiện, nhưng cũng trả lại nội dung phương tiện và cá nhân tham gia vào các sự kiện đó.

Tôi vừa mới bắt đầu với dự án và tôi muốn nhận được một số hướng dẫn chuyên gia về cách tốt nhất để tách biệt các mối quan tâm để có cơ sở mã duy trì được sạch sẽ.

Con đường tôi đang tiếp cận này là:

  • Models: về cơ bản xử lý hồ sơ với các lĩnh vực của họ, và tài sản tính khác. Tuy nhiên, các mô hình không chịu trách nhiệm cho việc đưa ra yêu cầu.
    • ví dụ: Cá nhân, tổ chức sự kiện, hình ảnh, bài viết, vv
  • Stores: Họ là về cơ bản lưu trữ. Ví dụ: eventStore sẽ lưu trữ tất cả các sự kiện nhận được từ máy chủ cho đến nay (từ các yêu cầu khác nhau) trong một mảng và cũng trong một băm sự kiện được lập chỉ mục bởi id.
    • ví dụ: individualStore, eventStore, vv
  • Controller: Họ buộc để một tập hợp các cuộc gọi API có liên quan, ví dụ eventsController sẽ chịu trách nhiệm tìm nạp sự kiện hoặc một sự kiện cụ thể hoặc tạo sự kiện mới v.v. Họ sẽ 'định tuyến' phản hồi khác nhau stores để truy xuất sau này. Họ không giữ phản hồi khi nó đã được gửi đến các cửa hàng.
    • ví dụ: eventsController, userSearchController etc.
  • Lượt xem: Chúng được gắn với một chế độ xem cụ thể. Nói chung, ứng dụng của tôi có thể có một số chế độ xem ở các địa điểm khác nhau, ví dụ: latestEventsView trên Trang tổng quan ngoài việc có trang sự kiện riêng.
  • Mẫu: là những gì họ đang có.

Khá thường xuyên, mẫu của tôi yêu cầu phải được ràng buộc trực tiếp đến các cửa hàng (ví dụ: peopleView muốn liệt kê tất cả các cá nhân trong individualStore trong danh sách, được sắp xếp theo một số thứ tự).

Và đôi khi, họ liên kết với một tài sản tính

alivePeople: function() { ... }.property('[email protected]'), 

Các bộ lọc khác nhau và phân loại tùy chọn 'chọn' trong giao diện, nên trở lại danh sách khác nhau từ các cửa hàng. Bạn có thể xem câu hỏi cuối cùng của tôi tại what is the right emberjs way to switch between various filtering options?

Ai nên thực hiện việc lọc này, chính chế độ xem hoặc cửa hàng?

Đây có phải là loại ràng buộc giữa các lớp được không, hoặc có mùi mã? Là sự tách biệt của mối quan tâm tốt, hoặc tôi thiếu một cái gì đó? Các controller không nên làm gì ở đây? Quan điểm của tôi có ràng buộc trực tiếp với các cửa hàng không?

Trường hợp đặc biệt đặc biệt nào của MVC phù hợp hơn với nhu cầu của tôi?

Cập nhật ngày 17 Tháng Tư năm 2012 Nghiên cứu của tôi đi vào, đặc biệt là từ http://vimeo.com/user7276077/videoshttp://jzajpt.github.com/2012/01/17/emberjs-app-architecture.htmlhttp://jzajpt.github.com/2012/01/24/emberjs-app-architecture-data.html

Một số vấn đề với thiết kế của tôi mà tôi đã tìm ra là:

  • điều khiển làm cho yêu cầu (cửa hàng hoặc mô hình hoặc thứ gì đó khác phải làm, chứ không phải bộ điều khiển)
  • statecharts bị thiếu - chúng quan trọng đối với tương tác của bộ điều khiển chế độ xem (Sau đôi khi bạn nhận ra sự tương tác của bạn không đơn giản hơn)

Đây là một ví dụ tốt về bảng xếp hạng quốc gia trong hành động: https://github.com/DominikGuzei/ember-routing-statechart-example

CẬP NHẬT 09 tháng một năm 2013

Vâng, nó được dài nhưng câu hỏi này gần đây nhận được rất nhiều lượt xem và đó là lý do tại sao tôi muốn chỉnh sửa nó để mọi người có thể hiểu được.

Cảnh quan của Ember đã thay đổi rất nhiều kể từ khi câu hỏi này được đóng khung và guides mới được cải thiện nhiều. EmberJS đã đưa ra các quy ước (như Rails) và MVC được định nghĩa nhiều hơn ngay bây giờ.

Bất kỳ ai vẫn còn lẫn lộn nên đọc tất cả các hướng dẫn và xem một số video: Seattle Ember.js Meetup

Tại thời điểm này, tôi đang nâng cấp ứng dụng của tôi để Ember.js 1.0.0-pre2.

+0

Tôi đã làm việc thông qua rất nhiều loại câu hỏi tương tự. liên quan: http://stackoverflow.com/questions/10045619/controller-strategy-garbage-collection-destroy –

+0

bạn đang sử dụng dữ liệu ember? –

+0

Một lần nữa, loại thông tin này là nơi mà EmberJS thiếu tại thời điểm này. Tôi mới bắt đầu làm việc với EmberJS ngày hôm qua và đã thất vọng với việc kéo tóc ra bởi vì hoàn toàn không có gì về việc EmberJS nên được thiết lập như thế nào và mỗi loại đối tượng chịu trách nhiệm - hoặc ít nhất: nó rất khó để tìm. –

Trả lời

4
  • Bạn nên suy nghĩ của ứng dụng của bạn về trạng thái. Có một cái nhìn tại this

  • Ban đầu, chỉ có một con đường và một mẫu được yêu cầu để mô tả một cái gì đó và cuối cùng là hiển thị nó trong trình duyệt, đó là những gì các API mới của Emberjs cố gắng để thực thi. Khi yêu cầu của bạn nhận được nhiều hơn công phu, bạn có thể ném vào một chế độ xem, bộ điều khiển hoặc đối tượng. Mỗi mặc dù trả lời một nhu cầu cụ thể.

  • Hãy xem xét một cái nhìn nếu bạn cần để xử lý bất kỳ sự kiện trình duyệt hoặc quấn
    bất kỳ bên thứ 3 javascript lib bạn đang sử dụng cho hoạt hình, phong cách ..

  • Hãy xem xét một đối tượng nếu bạn cần phải nắm bắt tên miền cụ thể
    thông tin, rất có thể giống như thông tin phụ trợ.

  • Bộ điều khiển chỉ đơn thuần là proxy cho đối tượng miền và có thể đóng gói logic không liên quan nhất thiết đến đối tượng.

Đó là tất cả những gì có liên quan. Nếu bạn tìm hiểu cách thiết kế ứng dụng của mình theo trạng thái, phần còn lại sẽ rơi vào đúng vị trí, cung cấp cho bạn đang sử dụng api mới nhất, thực thi các quy tắc tôi đã đề cập trước đó.

+0

Bạn sẽ đối xử với "các tiểu bang" như chia sẻ hoặc các mối quan tâm khác có sẵn từ bất kỳ nơi nào trong ứng dụng và không thay đổi trạng thái (tuyến đường)? Thông thường chúng xuất hiện như các modals. Chia sẻ phương thức với các tùy chọn (chia sẻ qua twitter hoặc facebook) ví dụ tốt nhất. Cảm ơn. –

0

Xem thêm điều này http://addyosmani.com/largescalejavascript/ Nó không phải là về EmberJs nói riêng nhưng nó là một bài viết tuyệt vời cung cấp cho bạn một ý tưởng làm thế nào để viết các ứng dụng javascript quy mô lớn.

3

Kể từ khi phát hành Ember 1.0.0-pre4 với triển khai bộ định tuyến mới, tôi đã thấy hai tham chiếu tốt mô tả cấu trúc ứng dụng EmberJS chuẩn hóa.

Những người bạn quen thuộc với Rails sẽ thấy nó khá quen thuộc.

https://github.com/trek/ember-todos-with-build-tools-tests-and-other-modern-conveniences

http://reefpoints.dockyard.com/ember/2013/01/07/building-an-ember-app-with-rails-api-part-1.html

Các ember-ray dự án tại https://github.com/emberjs/ember-rails bao gồm một máy phát điện Rails để tạo một EmberJS cấu trúc thư mục ứng dụng về cơ bản cũng giống như cấu trúc được mô tả trong hai liên kết ở trên.

Hướng dẫn EmberJS giờ đây cũng mô tả cấu trúc định tuyến mới.http://emberjs.com/guides/

CẬP NHẬT 21/08/2013

Nếu bạn đang sử dụng Rails thì ember-ray đá quý là rất tốt. Tôi đã sử dụng nó với rất nhiều thành công. Có hai nỗ lực trong cộng đồng ember để hỗ trợ việc cung cấp bố cục ứng dụng ember chuẩn hóa. Rõ ràng họ sẽ được sáp nhập nhưng bây giờ kiểm tra:

https://github.com/rpflorence/ember-tools

https://github.com/stefanpenner/ember-app-kit

+0

Đó là khá đúng sự thật. Với Ember.js nhấn 1.0, bây giờ chúng ta có một cách làm chuẩn. Giống như Rails '(có quy ước). –

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