Я нахожу использование Angular моделей, запутывающих. Angular, похоже, использует подход, который может быть любой моделью - I.E. Angular не включает явный класс модели, и вы можете использовать ванильные объекты JavaScript в качестве моделей.
В почти каждом примере Angular, который я видел, модель является фактически объектом, созданным вручную или возвращенным из вызова API через Resource. Поскольку почти каждый пример Angular, который я рассмотрел, прост, обычно данные модели, хранящиеся в области $scope в контроллере, и любое состояние, относящееся к модели, например, выбор, также хранятся в области $scope в контроллере. Это отлично подходит для простых приложений/примеров, но это похоже на упрощение, когда приложения становятся более сложными. Состояние модели, хранящееся в контроллере, рискует стать контекстуальным и потеряться, если контекст изменяется, например; Контроллер, хранящий selectedGallery
и selectedPhoto
, может хранить только глобальные selectedImage
, а не selectedPhoto
для каждой галереи. В такой ситуации использование контроллера для каждой галереи может свести на нет эту проблему, но будет казаться расточительным и, вероятно, неуместным и ненужным с точки зрения пользовательского интерфейса.
Angular определение моделей кажется ближе к тому, что я бы рассматривал VO/DTO, который является немым объектом, переданным между сервером и клиентом. Мой инстинкт заключается в том, чтобы обернуть такой объект в то, что я хотел бы рассмотреть Модель - класс, который поддерживает состояние, относящееся к DTO/VO (например, выбор), предлагает мутаторы, необходимые для управления DTO/VO, и уведомляет остальную часть внесение изменений в базовые данные. Очевидно, что эта последняя часть хорошо позабочена связями Angular, но я по-прежнему вижу сильную прецеденцию для первых двух обязанностей.
Однако я не видел этот шаблон, используемый в примерах, на которые я смотрел, но я также не видел, что я рассматриваю как масштабируемую альтернативу. Angular, кажется, неявно препятствует использованию Сервисов в качестве моделей, применяя Singletons (я знаю, что есть способы обойти это, но они не кажутся широко используемыми или одобренными).
Итак, как я должен сохранять состояние в данных модели?
[Edit] Второй ответ в этот вопрос интересен и близок к тому, что я сейчас использую.