在ES6中,我可以实现每个案例的块范围:
switch(somVar){
case 'first':
{
let itemId='foo';
}
break;
case 'second':
{
let itemId='bar';
}
}
Run Code Online (Sandbox Code Playgroud)
显然,itemId不妨在最高层宣布.
对于我的用例,本地范围的变量更有意义,因为在我的整体代码中,它更容易识别正在发生的事情,并且存在许多case,而一些块包含有问题的变量而其他块则没有.
我没有看到switch/case用作常用的块作用域.
我的问题很简单,是否有理由不这样做,风格明智或其他.
编辑,更新示例代码以避免混淆:
const someFunc(action) => {
switch(action.type){
case 'first':
{
let itemId=action.someObj.someProp.id;
//Do something with itemId
}
break;
case 'second':
{
let itemId=action.someObj.someProp.id;
//Do something with itemId
}
break;
case 'third':
//No use of itemId
}
}
Run Code Online (Sandbox Code Playgroud)
itemId可以在顶部声明,但我更愿意查看每个案例的属性.似乎没有直接的理由在不同的情况下共享变量.对于基本相同的东西来说,"发明"一个不同的名称似乎也是无稽之谈.
这可能以不同的方式编写,但此示例是Flux架构中的常见模式.
我们的api将有一个可重用的子/posts路由,适用于不同的顶级路由.
例如:
/me/posts
/users/{user-id}/posts
...
Run Code Online (Sandbox Code Playgroud)
帖子示例:
/posts
/{post-id}
/likes
/comments
/{comment-id}
...
Run Code Online (Sandbox Code Playgroud)
帖子也有固定的子路由,参数等.
使用RAML定义这种默认的可重用子路由的标准方法是什么?
当然,人们可以决定改变它并创建/ post端点,但我不认为应该根据RAML功能更改API定义.此外,如果我想要,我应该能够有多个指向同一资源的端点.
如果您有答案,请根据要求分享一个例子.
我对以下代码不起作用的原因感到有点困惑:
MutableLiveData<String> mutableTest = new MutableLiveData<>();
MediatorLiveData<String> mediatorTest = new MediatorLiveData<>();
mediatorTest.addSource(mutableTest, test -> {
Timber.d(test);
});
mutableTest.setValue("bla!");
Run Code Online (Sandbox Code Playgroud)
这段代码看起来很简单,但是调试器没有输入回调,也没有记录到控制台......
编辑:那不应该这样吗?
MutableLiveData<String> mutableTest = new MutableLiveData<>();
MediatorLiveData<String> mediatorTest = new MediatorLiveData<>();
mediatorTest.observe(loginActivity, str -> Timber.d(str));
mediatorTest.addSource(mutableTest, str -> Timber.d(str));
mutableTest.setValue("bla!");
Run Code Online (Sandbox Code Playgroud) 我不确定负载平衡如何与 Ingress 配合使用。
如果我理解正确的话,实际发生的事情是这样的:
我看不到负载平衡是如何执行的。
我绘制的上述方案有什么问题?
你能帮我改正吗?
注意:
- 以下答案告诉我 Ingress 控制器本身属于“loadbalancer”类型:Ingress service type
- 我使用 kind ClusterIP 因为我不想将负载均衡器暴露给外界。以下文章不支持此声明,其中负载均衡器将由服务提供:
一般问题:
当一个大对象作为参数传递时,它是否会影响性能?
案例:我编写了一个管理谷歌地图的组件.
在组件的每个方法中,它都需要传入Google Maps对象,因为我不想将地图设置为组件上的属性.
虽然可能是一个微不足道的问题,但我总是对此感到疑惑.
通常,在插入db之后,通常的做法是返回业务实体的id.
@Override
public Long createUser(UserEntity user) {
em.merge(user);
em.flush();
return user.getId();
}
Run Code Online (Sandbox Code Playgroud)
是否有令人信服的理由返回id而不是业务对象引用本身?
同样,我已经看到了update返回void,而它可能也是一个id/User.
如果我要为其他人编写一个DAO/Repository来使用,那么建议的返回值是什么(如果有的话),为什么?
我是backbone.js的初学者.
我的页面导航如下所示:

左侧导航定义了四种视图类型,而顶部导航应该更新数据模型并重新渲染当前视图(这就是我的想法).
我想允许用户根据他/她的个人偏好为当前视图和类别添加书签(并且可能将设置存储在浏览器的本地存储中).
这两个菜单可以互换使用,这意味着用户可以决定使用当前类别的模型显示不同的视图,并且用户可以在当前视图中选择不同的类别.
我无法确定如何以稳定的方式为此配置路由器.
请注意,此路径后面可能还有其他参数,例如基于profile_id在地图上显示活动标记.
现在,我有想法做这样的事情:
var AppRouter = Backbone.Router.extend({
routes: {
":view/:category": "aggregatefunction"
}
});
Run Code Online (Sandbox Code Playgroud)
但我不确定这是否会引导我达到我的需要.
由于我想要交替使用这些菜单并使它们可收藏,我已经开始坚持创建链接了.
您能否就结构给我一些建议,并告诉我潜在的陷阱,以帮助我在路上?
任何补充建议当然也是受欢迎的.
谢谢
编辑
对于奖金,我想阅读更多的意见.
我仍然在动态地构建和调整菜单锚标签中的hrefs时遇到一些麻烦,同时能够触发事件(更改类别/或更改视图).我正在寻找这个问题最稳定的解决方案.
如果可能的话,每个插图都附带一些代码.
谢谢.
我无法理解依赖注入范围内IOC容器的好处.
考虑这个基本的例子:
App::bind('Car', function()
{
return new Car;
});
Route::get('/', function()
{
dd(App::make('Car')); // resolve it
});
Run Code Online (Sandbox Code Playgroud)
我没有看到使用IOC容器而不是在构造函数中创建新实例的好处.
除了测试好处,我读到原因是松耦合.
然而,由于'汽车'绑定只是返回一辆新车的实例,我没有看到这个例子在哪种意义上会更松散地耦合.
对我来说,这两个似乎做了完全相同的事情.
我有一个简单的测试,activityTestRule它应该检查被测活动的方法是否被调用:
@Test
public void callLiveLocation() {
MapSettingsActivity spy = spy(activityRule.getActivity());
doNothing().when(spy).setLiveLocation();
onView(withId(R.id.btn_map_current_location)).perform(click());
verify(spy).setLiveLocation();
}
Run Code Online (Sandbox Code Playgroud)
setLiveLocation()当我在调试模式下检查时正在调用该方法。
然而,控制台告诉我:
想要但未调用:mapSettingsActivity.setLiveLocation(); -> at com.android.dx.mockito.InvocalHandlerAdapter.invoke(InvocalHandlerAdapter.java:53) 实际上,与此模拟的交互为零。
如何检查被测活动的方法是否被调用?
我使用 Android 的数据绑定来单击按钮,这会调用回调,而回调又会调用被测活动的方法。
笔记:
该方法是一个关于activity的简单方法:
public void setLiveLocation() {
super.startLocationListener();
}
Run Code Online (Sandbox Code Playgroud)
编辑:
我注意到创建间谍会返回 null,原因尚不清楚:
MapSettingsActivity spy = spy(activityRule.getActivity());
Run Code Online (Sandbox Code Playgroud) 我的问题涉及以下用例:
用例演员
用例说明
我认为应用的解决方案(我认为是Pubnub使用的)是为每个geohash创建一个主题.
在我的情况下,这意味着对于每个广播消息的用户,它需要发布到geohash主题,并且客户端(app /网站用户)将通过websocket消耗geohash主题,如果它落在定义的区域(半径).Ably似乎使用Web套接字提供这种可伸缩的服务.
我猜它会简化为这样的:
所以这意味着需要从发送广播消息的当前位置提取geohash.此geohash应具有足够小的粒度,以便接收用户可以设置或多或少准确的广播区域.(即如果我们希望允许用户定义接收实时消息的广播区域,那么geohash应该具有足够的准确性,这意味着如果我们决定扩展,则应该期望相当多的主题).
选项2是为具有较小特定粒度(覆盖较大区域)的geohash创建主题,并让客户端根据与消息一起发送的latlng值来处理准确性.
然后,客户端将决定是否删除消息.但是,这意味着发送更多消息(更多开销),并且成本更高.
我没有这种架构的经验,并质疑这种方法的可行性/可扩展性.
你能想到这个问题的另一种解决方案,以达到预期的效果,或者提供更多关于如何解决这类问题的见解吗?(我也考虑过使用常规的req-res流程,但这意味着垃圾邮件服务器,这似乎也不是一个很好的解决方案).
我实际上检查过.
鉴于161.4平方公里的区域(如布鲁塞尔地区),按字符串长度划分的地理位置如下:
1 ? 5,000km × 5,000km
2 ? 1,250km × 625km
3 ? 156km × 156km
4 ? 39.1km × 19.5km
5 ? 4.89km × 4.89km
6 ? 1.22km × 0.61km
7 ? 153m × 153m
8 ? 38.2m × 19.1m
9 ? 4.77m × 4.77m
10 ? 1.19m × 0.596m
11 ? 149mm × 149mm
12 ? 37.2mm …Run Code Online (Sandbox Code Playgroud) javascript ×3
android ×2
backbone.js ×1
dao ×1
ecmascript-6 ×1
geohashing ×1
java ×1
kubernetes ×1
laravel-4 ×1
mockito ×1
php ×1
raml ×1
rest ×1
websocket ×1