Scala PlayFramework 和 Angular JS - 在重复和混合方面投入了太多精力
Scala PlayFramework and Angular JS - too much effort in terms of duplication and mixing concetps
我试图在 playframework
+ scala
+ Angular JS
上编写一个应用程序。目的是创建一个Web应用程序,当JavaScript在浏览器中关闭或打开时,该应用程序可以正常工作。这是编写公共网站时的通常要求(这对人们和谷歌来说应该是有好处的,谷歌会索引它)
所以我最终得到了 ~50% 用 JavaScript
编写的代码,有两个 (2) 个名为"控制器"的文件夹 - 一个用于Scala
代码,一个用于JS
代码(因为 AngularJS 也使用控制器概念)。
另外,由于JS
代码应该使用Ajax
调用,我不得不再创建一个返回json
的scala控制器,但不html
返回客户端的请求。 而且......这都是我不喜欢的。这似乎太费力了。
在模板方面playframework
我应该考虑如何将Scala
与JavaScript
相结合,将参数从一种语言传递到另一种语言。使用一些技巧,例如显示何时处理JS,显示何时应该关闭。
这一切都使我的模板变得不那么容易理解,有一天,当我拥有庞大的代码库时,我可能会想出一个解决方案来复制我的模板(js 模板 + scala 模板) - 在JS
关闭/打开时使用正确的模板。然后JS代码的数量可能会上升到60%。
然后似乎我要复制所有内容,例如有两个不同的应用程序 - 用于谷歌和人。常见的(仅)是我的数据库中的数据本身,我不必复制数据。但。。在那里,我们可能会对该数据的格式有不同的问题(并且很可能是基于 JSON 的 [因为我不会浪费处理器时间来做表对象转换],但不是基于表 - NoSQL..然后我们再次来到像数据库一样的 JS - 就像 MongoDB 一样),JS
原生地与 JSON 配合得很好。
然后问题,为什么不使用 100% 的JS
来处理简单的事情,例如:请求-响应、形成页面、布局。服务器端JS
控制器可以形成我的模板 - 这样我就不需要从一种语言切换到另一种语言,从这个意义上说,效率更高。
问题:你有什么建议吗?这方面的最佳实践?我不是那种想最终使用 NodeJS
将JavaScript
用作所有语言的人 - 用于服务器和客户端。但是,让我们谈谈生产力和业务需求。
有一个AnjularJS控制器的例子(不是我的),我必须写多少JS:https://github.com/tastejs/todomvc/tree/gh-pages/architecture-examples/angularjs/js
想象一下,我必须保留PlayFramework控制器 - 对于HTML和AJAX调用,将scala/playframework模板中的内容与JavaScript混合在一起。
分享最终种子(https://github.com/angyjoe/eventual)中使用的收据:
编写你的 HTML。这样做,请随意使用任意数量的JavaScript框架和库(虽然种子是AngularJS)。
确定控制器遵循的 Play 模型。
决定每个控制器的操作(仅您需要的操作!)(
list
、create
、show(id)
、update(id)
、delete(id)
)。将这些操作实现为 Scala 操作。插入 Play 路由以将每个实现的操作提供给客户端框架。
插入一个(而且只有一个!播放路由以将样式化的 HTML 提供给客户端框架。
将剩余的开发时间和精力花在客户端...
看起来角度对你的情况来说太多了。也许你可以坚持在js端使用更简单的Ajax,比如jQuery,并使用Rest端点作为播放路由,将json提供给你的页面。
你看过这篇博文吗 - AngularJS 和 Play Framework?
目前,这似乎可以帮助我:
https://github.com/nau/jscala
或者这个:https://github.com/lampepfl/scala-js
但这不是一个必要的答案。
更新:
对于不想在 JS 中跳得太深的 scala 开发人员来说,我看到的唯一一种方法是:
等到 JScala 或 Scala-JS
等解决方案准备好使用(或贡献)才能替换 CoffeScript in
Play2。在那一天之前,我们只需要忍受这一点。
在这里我们可以看到:https://github.com/typesafehub/angular-seed-play
没有应用/视图目录的播放应用。此外,"routes"文件几乎是空的 - 因为Angular在客户端关心它。所以我们不需要它们。
有点像俄新社的方式。因此,如果有一天我们决定让这个应用程序可供Google使用(可谷歌搜索),我们将在那里放置视图和路线。
更新 2:
现在我正在做一些PlayFramework
项目。而且我发现只使用普通的请求-响应 + 小 JQuery 或 JScala 一点也不差。
是(我应该说,这是众所周知的观点,但很容易忘记):你不确定你的应用程序是否会受欢迎。您是否每秒有 1K 用户。如果是 - 那么您(将)在性能方面存在问题,您可以通过在客户端转移应用程序的某些部分来改善(或在服务器端使用手牌 Akka Actor)。所有人(像我一样)都应该考虑开发生产力的观点(这是PlayFramework
最初创建的目的),当你的想法可以放在你的模板/html上以立即看到结果时。关于AngualrJS
的噪音太多了,以至于人们(甚至我:))不假思索地失去了你的思想跳到那里。
仅加载文件还是从服务器端加载200k of json
文件200k + 5k html
(比较请求-响应与休息 - json)是否有意义/关键?应该不会。对于像stackoverflow
这样的网站/应用程序以及许多其他网站/应用程序来说,这并不重要。开发生产力很重要。
"点",这很重要。 "跟随亮点,继续前进(C)":)
更新3:(基于实际需求的演变)
现在我有一个包含 2 个模块的应用程序:
- "web" -
nodejs
客户端带有 AngularJS 的应用程序 - "服务器"
play
没有视图或服务器端模板的应用程序。但我感到失望的是,在 IntelliJ 的想法中,使用 Scala 和 SBT 插件,它只是无缘无故地杀死了我的笔记本电脑启动所有 8 个内核(人类发明量子计算机可能需要一些时间)。我没有时间等待它)。
我现在需要的只是简单的休息东西。所以我最终可能会拥有 NODE JS 服务器(用于使用 MongoDB 之类的东西)和 Play 1.3 服务器(java)!(在需要时将其连接到 scala 库/逻辑)。毕竟我只需要 REST 层 - 无论如何它都不应该是火箭科学。因此,要创建一个简单的网站 - 我将使用10%的Play和90%的JS,直到有额外的逻辑可以在scala上创建,利用强类型和功能方法,并在我需要时与现有的java api连接。尽管我是Java人(历史上),但我发现在java和现在的scala世界中,事情对我来说过于复杂。
似乎:首先应该考虑使用html
,css
和node
/js
创建东西,然后在创建基于站点的应用程序时进一步考虑他需要什么。在逻辑需要时利用type-safety
。
更新 4:
有趣的片段
- https://github.com/greencatsoft/scalajs-angular
- https://github.com/greencatsoft/scalajs-angular-todomvc
- 相关问题: Scala-JS for Real Web 项目
我刚刚做了一个示例项目,展示了如何使用Scala编写AngularJS/Play应用程序.js:
https://github.com/greencatsoft/scalajs-angular-todomvc
应该有一些粗糙的边缘,但我相信能够在Scala中编写所有内容(包括AngularJS部分)可以吸引一些人。
这是一个很好的混合项目示例(angularjs play mongodb 和 scala)和很棒的教程,它展示了如何构建一个现代 Web 应用程序,包括一个客户端 JavaScript 应用程序,使用 AngularJS 用 CoffeeScript 编写,从 Play 框架提供服务,并使用 Reactive Mongo 的文档持久性,这是 MongoDB 的非阻塞 Scala 客户端:
https://github.com/lashford/modern-web-template#master
http://typesafe.com/activator/template/modern-web-template
- 混合 ui-sref 和 $state.go 在 Angular ui-router 中进行状态转换
- 如何在服务、技能、投资组合等方面添加滑动效果
- 混合元素的有角度的ng重复
- VueJS多个混合
- Typescript在语法方面与es6/es7有多大不同
- 在使用javascript的Ajax方面遇到了困难
- 递增 PHP 变量在 JSCRIPT 文档工作方面
- 如何对混合格式的数字(89900,1k,1.5k,15.2k)进行排序
- 过滤”;溢价;页面加载选项使用混合
- 将javascript与PHP混合?(跟踪Google Analytics虚拟页面浏览量)
- 在简单的iMacros编程方面需要帮助
- 在混合基本 URL 下动态加载 require.js 模块
- javascript散列/数组混合性能
- 我需要javascript替换regex方面的帮助
- 如何通过ibmworklight中的sql适配器从db2中检索或显示html页面上的数据?android混合应用程序开发
- 如何使用dojo方面调用常规JavaScript函数
- 评论的含义是什么;Go Horse'在编码方面?这是某种过程吗
- 如何在 VB 项目中混合使用 Razor 和 Javascript
- 混合类型提前.js和引导 3.
- Scala PlayFramework 和 Angular JS - 在重复和混合方面投入了太多精力