11

从表面上看,这听起来像是一个愚蠢的问题,但为什么Hot Towel SPA 模板完全包含Breeze

最近几天我一直在学习 Hot Towel 及其依赖项,据我所知,模板中的任何内容都没有真正使用 Breeze。也许这会随着未来的一些版本而改变?

当然,Breeze 是一个很好的图书馆。但它受 CRUD 方法的约束,需要您以特定的方式设计 ApiController。(元数据、SaveChanges 等)请参见此处

它还引导您使用实体框架。虽然这更像是一种软依赖,但由于 Breeze 还展示了一个没有它的示例,它仍然会引导您使用修改后的存储库模式来实现类似的模式。

如果您使用的是 NoSQL 数据存储或 CQRS 模式而不是 CRUD,那么 Breeze 将变得非常难以使用。有用于数据访问的替代库在这种风格下运行良好,例如AmplifyJS

但是热毛巾的其余部分非常好!我特别喜欢杜兰达尔。那么问题来了,如果模板实际上没有进行任何数据访问——为什么要包含任何数据访问组件呢?最好在没有 Breeze 的情况下发布它,如果最终用户想要使用 Breeze、Amplify 或其他任何东西 - 那就这样吧。Hot Towel 的其余部分将继续作为出色的 SPA 实施而大放异彩。

4

2 回答 2

18

马特 - 好问题。既然我创建了它,我想我应该回答:)

当我构建模板时,我专注于提供足够的东西让人们使用正确的工具,以及足够的入门代码来指导。我不希望任何人撕掉代码。我不喜欢那些让你走上一条道路并让你删除大量文件和代码并改变方向的模板。这些是样本。

样品很好。事实上,样本可以非常出色(就像其他模板一样,我觉得更像样本)。这些还有另一个目的:展示你如何做事。

回到 Hot Towel 模板……如果我包含使用 Breeze 的代码,我会很想在客户端上添加一个 datacontext.js 和一个 model.js。它们将包含数据访问代码和扩展客户端模型的代码。然后我会很想添加一个控制器、一些服务器端模型、一个 ORM 和一个数据库。到达那里后,我想在多个屏幕中使用数据,这导致我使用 Breeze 进行更多的 Knockout 和缓存。然后我可能会想添加编辑,这将导致更改跟踪。很快我就有了一个完整的应用程序。或者更保守一点,我又拿了一个样本。虽然这些方法会为如何将它们组合在一起提供更多指导,但它们不会帮助您“开始”使用模板,您可以在其中开始构建和添加自己的代码。如果我缺少其中一些功能,它'

就目前而言,HotTowel 非常接近真正意义上的模板。您创建了一个新项目,然后开始添加自己的代码。

您可能会争论(而且您可能会争论)Breeze 不应该在那里,因为我不在模板中使用它。我也不使用moment.js,顺便说一句。但是,我认为它们都是优秀的库,没有它们我不想构建基于 CRUD 的 SPA。正如您所建议的,Breeze 很灵活,因此您不必走特定的路径。

了解 Breeze 价值的最佳方式是构建一个具有其功能但没有 Breeze 的应用程序。然后您可以看到需要多少代码以及它的参与程度。例如,请参阅我在 Pluralsight 的中级 SPA 课程,我正是这样做的:http: //jpapa.me/spaps

所以你问“为什么是微风?” ...因为我强烈推荐它用于构建 SPA。

感谢您的提问,祝您好运!

于 2013-02-24T18:31:55.610 回答
7

感谢您提出问题。

John,作为 HT 的作者,提供了一个答案。我,作为 Breeze 项目的负责人,我倾向于同意他的观点 :)

HotTowel 为您奠定了基础。它不是建筑物本身。

它是针对特定类型应用程序的基础,即基于一组特定的协作 JavaScript 和 ASP.NET 技术的 CRUD 应用程序。Breeze 是贡献者……但不是唯一的贡献者。Knockout 具有 MVVM 设计和 2 路数据绑定,特别适合 CRUD 应用程序典型的数据输入任务。

当然还有其他种类的SPA。有一类重要的应用程序主要呈现信息并接受很少的用户输入。这样的应用程序并不能从数据绑定中获得太多好处,而且编写它们的人通常会对数据绑定特别是 KO 怀有敌意。

我的观点是,HT 针对特定类别的应用程序……至少在以持续流行度来衡量时,这种应用程序恰好非常成功。它为构建这些应用程序的人提供商品。它可能不是其他类型应用程序的正确起点。

确实,通往 Breeze 的捷径贯穿于 Web API、EF 和关系数据库。拿走这些,您可能会在服务器上编写更多代码(在客户端上编写更多代码)。这可能是您的完美权衡。

Breeze 的作者希望使这条路径更容易。我不认为 BreezeJS 让它变得更难。我不明白你的说法“微风变得很难使用”。你试过了吗?

您的客户端可以以您选择的任何方式与任何 HTTP 资源进行通信。使用现有的 Web API 控制器非常容易(尽管使用 Breeze Web API 控制器更容易)。如果您愿意,可以使用 amplify.js(顺便说一句,您可以告诉 Breeze 使用 amplify 进行 AJAX 调用)。如果您不想,您甚至不必使用 BreezeEntityManager来查询和保存数据。

BreezeJS 的其余部分可能对您仍然有价值。在您弄清楚如何检索和存储数据以及您更喜欢 Entity-ChangeSet 样式还是 Command/Query 样式之后,还有很多工作要做。

你必须找到这些问题的答案:

  • 您将如何将原始 JSON 数据塑造成可绑定的对象?
  • 您将如何保留这些对象并在多个屏幕上共享它们,而不需要对服务器进行冗余往返?
  • 将地址绑定到 StatesAndProvinces 的组合框时,您将如何从一个对象导航到相关对象?
  • 您将如何跟踪变化?
  • 你将如何验证它们?
  • 当应用程序“墓碑”时,您将如何将部分或全部数据存储在本地存储中?

即使您不希望它为您查询和保存,Breeze 也可以帮助您完成这些琐事。

如果你的回答仍然是“我会自己做所有这些,谢谢”......好吧,从你的 HotTowel 项目中删除 Breeze 就像这样简单:

Uninstall-Package breeze.webapi

于 2013-02-24T20:24:01.980 回答