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ởiid
.- 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/videos và http://jzajpt.github.com/2012/01/17/emberjs-app-architecture.html và http://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
.
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 –
bạn đang sử dụng dữ liệu ember? –
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. –