Подтвердить что ты не робот

Почему HotTowel включает Breeze?

Это может показаться глупым вопросом на поверхности, но почему шаблон Hot Towel SPA включает Breeze вообще?

Я провел последние несколько дней, изучая Hot Towel и его зависимости, и насколько я могу судить, ничто в шаблоне не использует Breeze. Возможно, это изменится в будущем выпуске?

Конечно, Бриз - хорошая библиотека. Но он связан с методологией CRUD и требует, чтобы вы разработали свой ApiControllers определенным образом. (Метаданные, SaveChanges и т.д.) см. Здесь

Он также ведет вас к Entity Framework. Хотя это скорее мягкая зависимость, так как Breeze также показывает образец без него, он по-прежнему ведет вас к аналогичной схеме реализации с использованием модифицированного шаблона репозитория.

Если вы используете хранилище данных NoSQL или шаблоны CQRS вместо CRUD, Breeze становится очень сложным в использовании. Существуют альтернативные библиотеки для доступа к данным, которые хорошо работают в этом стиле, например AmplifyJS.

Но остальное горячее полотенце отлично! Мне особенно нравится Дюрандал. Поэтому возникает вопрос: если шаблон фактически не выполняет никакого доступа к данным - зачем вообще включать какой-либо компонент доступа к данным? Было бы лучше отправить его без Breeze, и если конечный пользователь захочет использовать Breeze или Amplify или что-то еще - тогда пусть будет так. Остальная часть Hot Towel будет продолжать светиться как отличная реализация SPA.

4b9b3361

Ответ 1

Мэтт - Хороший вопрос. Поскольку я создал его, я думаю, я должен ответить:)

Когда я построил шаблон, я сосредоточился на том, чтобы обеспечить достаточное количество людей, которые собираются с нужными инструментами, и достаточно кода стартера для руководства. Я не хотел, чтобы кто-то копировал код. Я не поклонник шаблонов, которые запускают вас по пути и заставляют вас удалять множество файлов и кода и менять направление. Это образцы.

Образцы хороши. На самом деле, образцы могут быть превосходными (как и другие шаблоны, которые, как я считаю, больше похожи на образцы). Они служат другой цели: показать, как вы можете что-то делать.

Вернемся к шаблону Hot Towel... если я включу код, который использует Breeze, у меня возникнет соблазн добавить datacontext.js и model.js на клиенте. Они будут содержать код доступа к данным и код для расширения моделей на клиенте. Тогда у меня возникнет соблазн добавить контроллер, некоторые модели на стороне сервера, ORM и базу данных. Когда-то там я хотел бы использовать данные на нескольких экранах, что приводит меня к более нокауту и ​​кешированию с помощью Breeze. Тогда у меня может возникнуть соблазн добавить редактирование, что приведет к отслеживанию изменений. Вскоре у меня полнофункциональное приложение. Или более консервативно, у меня снова есть образец. Хотя эти подходы будут давать больше рекомендаций о том, как их объединить, они не помогут вам "начать" с шаблона, где вы можете просто начать создавать и добавлять свой собственный код. Если я прекращу некоторые из этих функций, он все еще идет по дороге, которая требует от вас изменения, как я это сделал.

Как и сегодня, HotTowel довольно чертовски близок к шаблону в прямом смысле. Вы создаете новый проект, и вы отключены и добавляете свой собственный код.

Вы можете поспорить (и вы можете быть), что Бриз не должен быть там, так как я не использую его в шаблоне. Я также не использую moment.js, BTW. Тем не менее, я утверждаю, что они оба отличные библиотеки, которые я бы не хотел создавать CRUD на основе SPA без них. Как вы полагаете, Бриз является гибким, поэтому вам не нужно идти по определенному пути.

Лучший способ понять значение Breeze - создать приложение, имеющее свои функции, но без Breeze. Затем вы можете увидеть, сколько кода требуется и как это происходит. Для одного из таких примеров см. Мой курс SPA среднего уровня в Pluralsight, где я делаю именно это: http://jpapa.me/spaps

Итак, вы спрашиваете: "Почему Бриз?"... потому что я настоятельно рекомендую его для строительства SPA.

Спасибо за просьбу и удачу!

Ответ 2

Спасибо, что задал вопрос.

Джон, как автор ХТ, предложил ответ. Я, как руководитель проекта Бриз, склонен согласиться с ним:)

HotTowel создает основу для вас. Это не само здание.

Это основа, предназначенная для определенного типа приложений, CRUD-приложения на основе определенного набора взаимодействующих технологий JavaScript и ASP.NET. Бриз - вкладчик... но не единственный. Нокаут, с его MVVM-дизайном и двухсторонней привязкой данных, особенно хорошо подходит для задач ввода данных, типичных для приложений CRUD.

Конечно, существуют и другие виды SPA. Там важный класс приложений, которые в основном представляют информацию и принимают небольшой ввод пользователя. Такие приложения не так сильно выигрывают от привязки данных, и люди, которые их пишут, могут стать довольно враждебными в отношении привязки данных в целом и KO в частности.

Моя точка зрения заключается в том, что HT нацелен на определенный класс приложений... тот, который, случается, чрезвычайно успешен, по крайней мере, когда измеряется устойчивой популярностью. Он предоставляет товары для людей, которые создают эти приложения. Возможно, это неправильное место для других приложений.

Верно, что легкий путь к Бризу проходит через веб-интерфейс API, EF и реляционную базу данных. Уберите их, и вы можете написать больше кода на сервере (и немного больше на клиенте). Это может быть идеальным компромиссом для вас.

Авторы Бриза хотели бы сделать этот путь проще. Я не думаю, что BreezeJS усложняет. Я не понимаю вашего заявления "Бриз становится очень трудным в использовании". Вы пробовали это?

Клиент может взаимодействовать с любым HTTP-ресурсом любым способом. Достаточно просто использовать существующие контроллеры Web API (хотя и проще с контроллерами Breeze Web API). Вы можете использовать amplify.js, если хотите (кстати, вы можете сказать Бриз, чтобы делать AJAX-вызовы с усилением). Вам даже не нужно использовать Breeze EntityManager для запроса и сохранения данных, если вы этого не хотите.

Остальная часть BreezeJS может по-прежнему иметь ценность для вас. Осталось много работы после того, как вы выяснили, как вы будете получать и хранить данные, и предпочитаете ли вы стиль Entity-ChangeSet или стиль Command/Query.

Вам нужно будет найти ответы на следующие вопросы:

  • Как вы сформируете необработанные данные JSON в связываемые объекты?
  • Как вы будете держаться за эти объекты и делиться ими на нескольких экранах, не делая избыточных круглых поездок на сервер?
  • Как вы будете перемещаться от одного объекта к связанному объекту так же, как и при привязке адреса к выпадающему значению StatesAndProvinces?
  • Как вы отслеживаете изменения?
  • Как вы будете их проверять?
  • Как вы будете хранить некоторые или все данные в локальном хранилище, когда приложение "надгробия"?

Бриз может помочь с этими задачами, даже если вы не хотите, чтобы он запрашивал и сохранял для вас.

И если вы ответите "Я сделаю все это сам, спасибо"... ну, удаление Breeze из вашего проекта HotTowel так же просто, как:

Uninstall-Package breeze.webapi