小编Tra*_*ace的帖子

ES6阻止在切换中使用

在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架构中的常见模式.

javascript ecmascript-6

8
推荐指数
1
解决办法
2112
查看次数

RAML定义可重用的子路由

我们的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定义.此外,如果我想要,我应该能够有多个指向同一资源的端点.

如果您有答案,请根据要求分享一个例子.

rest raml

8
推荐指数
1
解决办法
194
查看次数

Android MediatorLiveData观察者

我对以下代码不起作用的原因感到有点困惑:

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)

android android-livedata

8
推荐指数
1
解决办法
8443
查看次数

澄清 Ingress 负载均衡器

我不确定负载平衡如何与 Ingress 配合使用。
如果我理解正确的话,实际发生的事情是这样的:

在此处输入图片说明

我看不到负载平衡是如何执行的。
我绘制的上述方案有什么问题?
你能帮我改正吗?

注意:
- 以下答案告诉我 Ingress 控制器本身属于“loadbalancer”类型:Ingress service type
- 我使用 kind ClusterIP 因为我不想将负载均衡器暴露给外界。以下文章不支持此声明,其中负载均衡器将由服务提供:

https://medium.com/google-cloud/kubernetes-nodeport-vs-loadbalancer-vs-ingress-when-should-i-use-what-922f010849e0

在此处输入图片说明

kubernetes

8
推荐指数
2
解决办法
1344
查看次数

传递大对象作为参数

一般问题:
当一个大对象作为参数传递时,它是否会影响性能?

案例:我编写了一个管理谷歌地图的组件.
在组件的每个方法中,它都需要传入Google Maps对象,因为我不想将地图设置为组件上的属性.

javascript

7
推荐指数
1
解决办法
421
查看次数

DAO/repository:插入/更新后的良好实践返回值

虽然可能是一个微不足道的问题,但我总是对此感到疑惑.

通常,在插入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来使用,那么建议的返回值是什么(如果有的话),为什么?

java dao design-patterns repository-pattern

7
推荐指数
1
解决办法
2442
查看次数

用于二维菜单的骨干路由器:建议

我是backbone.js的初学者.
我的页面导航如下所示:

在此输入图像描述

左侧导航定义了四种视图类型,而顶部导航应该更新数据模型并重新渲染当前视图(这就是我的想法).
我想允许用户根据他/她的个人偏好为当前视图和类别添加书签(并且可能将设置存储在浏览器的本地存储中).
这两个菜单可以互换使用,这意味着用户可以决定使用当前类别的模型显示不同的视图,并且用户可以在当前视图中选择不同的类别.

我无法确定如何以稳定的方式为此配置路由器.
请注意,此路径后面可能还有其他参数,例如基于profile_id在地图上显示活动标记.

现在,我有想法做这样的事情:

var AppRouter = Backbone.Router.extend({
        routes: {
            ":view/:category": "aggregatefunction" 
        }
    });
Run Code Online (Sandbox Code Playgroud)

但我不确定这是否会引导我达到我的需要.
由于我想要交替使用这些菜单并使它们可收藏,我已经开始坚持创建链接了.

您能否就结构给我一些建议,并告诉我潜在的陷阱,以帮助我在路上?
任何补充建议当然也是受欢迎的.
谢谢

编辑
对于奖金,我想阅读更多的意见.
我仍然在动态地构建和调整菜单锚标签中的hrefs时遇到一些麻烦,同时能够触发事件(更改类别/或更改视图).我正在寻找这个问题最稳定的解决方案.
如果可能的话,每个插图都附带一些代码.
谢谢.

javascript backbone.js backbone-routing

6
推荐指数
1
解决办法
292
查看次数

Laravel4 IOC容器的好处

我无法理解依赖注入范围内IOC容器的好处.
考虑这个基本的例子:

App::bind('Car', function()
{
    return new Car;
});

Route::get('/', function()
{
    dd(App::make('Car'));  //  resolve it
}); 
Run Code Online (Sandbox Code Playgroud)

我没有看到使用IOC容器而不是在构造函数中创建新实例的好处.
除了测试好处,我读到原因是松耦合.
然而,由于'汽车'绑定只是返回一辆新车的实例,我没有看到这个例子在哪种意义上会更松散地耦合.
对我来说,这两个似乎做了完全相同的事情.

php ioc-container loose-coupling laravel-4

6
推荐指数
1
解决办法
183
查看次数

Espresso / Mockito 验证该方法被调用

我有一个简单的测试,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)

android mockito android-espresso

6
推荐指数
1
解决办法
3244
查看次数

基于geohashes的pubsub主题划分的建议,用于ably websocket连接服务

我的问题涉及以下用例:

用例演员

  • 用户A:设置广播区域并使用实时帖子查看流的用户.
  • 用户B:从用户A设置的广播区域内发送广播消息的第一个用户.
  • 用户C:从用户A设置的广播区域内发送广播消息的第二用户.

在此输入图像描述

用例说明

  • 用户A选择他想要接收直播消息的边界(半径)的广播区域.
  • 用户A打开livefeed并请求一组初始的livefeed项目.
  • 当用户A的实时馈送仍然打开时,用户B从用户A的广播区域内广播消息.当用户A的实时进纸打开时,带有1个新的实时进纸项目的标签会显示在其上方.
  • 当用户C从用户A从所选广播区域内发布另一个实时馈送帖子时,标签计数器递增.

用户A收到类似于Facebook示例的通知: 在此输入图像描述

我认为应用的解决方案(我认为是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)

publish-subscribe websocket geohashing ably-realtime

6
推荐指数
1
解决办法
204
查看次数