我使用Ember-CLI构建我的ember应用程序,但我不想使用Ember Data.
默认情况下,当您键入以下命令时:ember generate model Person,ember-cli将在名为"person.js"的模型下创建一个js文件,它将是一个DS.extend(...).我不想那样,我想要一个普通的余烬物.所以......我删除了person.js并手动创建了一个名为models.js的js文件(这就是我要声明所有ember对象的地方).
这是我在models.js中的内容:
import Ember from "ember";
App.Person = Ember.Object.extend({
helloWorld: function() {
alert("Hi, my name is " + this.get('name'));
}
});
Run Code Online (Sandbox Code Playgroud)
我已经检查过"App"是否可用(在app.js中声明了一个名为App的应用程序 - 由EmberCLI生成 - 并且它被导出).
所以......现在......我想从我的路线中使用它.我有这样的东西(在"routes"下的一个名为person.js的js文件中):
import Ember from 'ember';
export default Ember.Route.extend({
model: function() {
return App.Person.create({
name: "Tom Dale"
});
}
});
Run Code Online (Sandbox Code Playgroud)
嗯......它不起作用.控制台说:处理路由时出错:person.index App未定义ReferenceError:未定义App.
好的...我检查了生成的js文件(myproject.js):我发现了这个:
define('infoleccion2015/tests/models/models.jshint', function () {
'use strict';
module('JSHint - models');
test('models/models.js should pass jshint', function() {
ok(false, 'models/models.js should pass jshint.\nmodels/models.js: line 3, col 1, \'App\' is not …Run Code Online (Sandbox Code Playgroud) 我正在使用Ember-CLI来开发我的Ember应用程序.
我有一个"超级"路线(在routes/authenticate.js中),如下所示:
import Ember from 'ember';
export default Ember.Route.extend({
});
Run Code Online (Sandbox Code Playgroud)
我想让它成为我的应用程序中其他一些路线的基类,比如这个(route/home.js):
import Ember from 'ember';
export default App.AuthenticatedRoute.extend({
});
Run Code Online (Sandbox Code Playgroud)
它不起作用.控制台说:未捕获的ReferenceError:未定义应用程序
Ember-CLI指南对此方案没有任何说明(我认为这是必不可少的).
任何人都知道如何以最简单的方式正确地做到这一点?
谢谢,拉卡
CQRS/ES架构中的有界上下文之间的通信是通过事件实现的; context A生成事件作为对命令的响应,然后通过事件总线(消息队列)将这些事件转发到上下文B.
或者......您可以将事件存储在eventstore中(属于上下文A).或者......两者(存储和转发).
我的问题是:从上下文B,我应该从上下文存储中提取事件吗?或者只是消费通过事件总线推送的事件?
我倾向于拉动方式.因为那时我们可以在上下文B中进行一些追赶.相反,在推送方法中,上下文B可能不知道在B遇到停机时传递的事件.
所以......这意味着......当我们有eventstore时,我们可以简单地忘记消息队列(似乎是多余的)?
或者我在这里遗漏了什么?
我将我的系统分解为(至少)两个有限的背景:学习设计和调查计划.
在研究设计背景下有一个名为"主题"(面试的潜在主题)的概念.我们还维护该领域的受试者和人群之间的关联.
现在,在调查计划中,我们还需要(一些)关于该主题的信息(例如:用于计划访问,或者甚至用于预期选择的问卷,以防该受试者所属的人口事先已知).
所以,在这两种情况下我都需要这个"主题".
我应该采取什么方法?有一个共享内核,正如Eric Evans DDD一书中所解释的那样?我不介意(至少现在)让两个上下文共享同一个数据库.
或者......我应该去纯粹的微服务吗?含义:这两个不能/不应该共享数据库...,在这种情况下,我可能必须通过事件传递去镜像/复制路由:https://www.infoq.com/news/2014/11 /共享数据-有界上下文
对于上述情况,有关哪一个更好的想法?
谢谢!
我们通常如何处理聚合根的版本控制?
我正在考虑这条线(我在调查设计领域)。
进行版本控制的一种方法是使用一种基于现有版本的显式方法来创建新版本。例如,Study(聚合根)。
所以最初我们有一个聚合根,其根实体是 Study with (business) key "ABC", version "1"。
通过在 Study 上调用方法“newVersion()”,将创建该 Study和属于同一聚合根的所有其他实体的副本。
所以基本上,版本控制是通过创建一个单独的实例(聚合根)来完成的。ID 是复合的(业务密钥 + 版本)。
我们怎么知道它是否是一个分支?还是只有一个版本?(1.1?或2)。我想,这个简单的规则会起作用:如果没有关联的其他版本,那么它是“一个版本”(2);如果已经有另一个版本,那么它就是一个分支(1.1)。
另一个问题:噪音。
但这意味着,我们无法处理/修改现有版本。每次我们想对我们的对象进行修改时,我们都必须创建一个 newVersion。每次???嗯……听起来不对。
或者……我们可以根据标志(活动/非活动或已发布/未发布)制定这样的规则。如果标志为“not-active”,我们可以直接修改AR,无需创建新版本。如果标志处于活动状态,我们必须:(a)首先将其设置为“not-active”,然后修改....或(b)创建一个 newVersion 并处理该版本(最初设置为“not-active”) )。
您想就此事分享任何想法/经验?
有没有办法将Future类型的对象[未来[T1],未来[T2]]]转换为类型为[Future [T1],Future [T2]]的对象?
也许像flatMap这样适用于Either ....
我正在尝试使这个代码工作(我有类似的代码实现包裹的行动链,但它不涉及未来.它工作,更简单).下面的代码是基于此,通过必要的修改使其适用于涉及期货的情况.
case class WebServResp(msg: String)
case class WebStatus(code: Int)
type InnerActionOutType = Either[Future[Option[WebServResp]], Future[WebStatus]]
type InnerActionSig = Future[Option[WebServResp]] => Either[Future[Option[WebServResp]], Future[WebStatus]]
val chainOfActions: InnerActionSig = Seq(
{prevRespOptFut =>
println("in action 1: " + prevRespOptFut)
//dont care about prev result
Left(Future.successful(Some(WebServResp("result from 1"))))
},
{prevRespOptFut =>
println("in action 2: " + prevFutopt)
prevRespOptFut.map {prevRespOpt =>
//i know prevResp contains instance of WebServResp. so i skip the opt-matching
val prevWebServResp = prevRespOpt.get
Left(Some(prevWebServResp.msg + " & " …Run Code Online (Sandbox Code Playgroud) ember-cli ×2
ember.js ×2
cqrs ×1
either ×1
flatmap ×1
future ×1
inheritance ×1
routes ×1
scala ×1
versioning ×1