小编Vla*_*lav的帖子

以类型安全的方式在集合中存储两种类型的对象

我一直在实现一个增强的Shunting-Yard算法来解析算术表达式.该算法的一个方面是它维护a Queue和a Stack.

在我的实现中,Queue包含ExpressionsOperators.在Stack包含OperatorsParenthesis.

Expressions,Parenthesis并且Operators没有任何共同点,保证他们中的任何两个拥有共享接口.

处理办法:

  • 我目前的实施包括ExpressionOperator实施一个INotParanthesis.OperatorParanthesis实施一个INotExpression.然后我宣布Queue <INotParanthesis>,和Stack <INotExpression>.

    我不喜欢这种实现 - 这些接口似乎非常适合更清晰的算法代码.我也相信接口应该描述一个对象是什么,而不是它不是什么.

  • 另一方面,我也不想使用集合<Object>,因为很难确定这些代码的正确性.

  • 唯一一个我想出来的,到目前为止,正在实施我自己NonParanthesisQueueNonExpressionStack容器.这样做的好处是可以对从这些容器中拉出的对象进行更一致的类型检查 - 而且还有更多代码的缺点.

我的方法有什么合理的替代方案吗?

c# collections types heterogeneous

5
推荐指数
1
解决办法
833
查看次数

如何在后台加载AJAX数据,而不会影响性能?

我有一个非常大的产品目录,我试图在"页面"中加载,例如,一次10个项目.

现在,如果用户打开我的目录,并花30秒浏览第一个"页面",我希望我的应用程序继续从服务器加载数据 - 这样当用户进入不同的页面时,其可能性很高数据已经加载到他们的浏览器中.

我已经设法使用递归的Ajax.Request,在加载页面后,加载下一页.

Controller.prototype.loadVarieties = function(varietyNames){
    //Loads varieties from the catalog, checks if more varieties need to be loaded, and keeps loaded them.
    new Ajax.Request("../GetVarieties.php", {
                method: 'get',
                parameters: {'varietyNames': varietyNames.toJSON()},
                onSuccess: function (response) {
                    this.model.parseCatalog(response.responseText);
                    var varietyNames = this.model.getVarietiesToLoad();
                    if(varietyNames.length != 0){
                        this.loadVarieties(varietyNames);
                    }
                }.bind(this)
            });
}
Run Code Online (Sandbox Code Playgroud)

不幸的是,这会导致性能问题 - 浏览器会非常缓慢地响应用户输入,直到加载整个目录.(此时,我也可以加载整个目录,或者不加载后台加载).

我该怎么做才能实现数据的低优先级后台加载?它甚至可能吗?我应该放弃,只是懒惰加载?

javascript ajax performance web-applications

4
推荐指数
1
解决办法
2559
查看次数

以编程方式确定MediaWiki映像的URL

我正在尝试使用PHP脚本从特定的MediaWiki页面(或只是特定的图像)下载图像.

我可以通过api运行查询,方法是通过以下URL检索页面

.../w/action=query&prop=images&titles=Abakanskiy
Run Code Online (Sandbox Code Playgroud)

并得到回应

<?xml version="1.0"?>
<api>
  <query>
    <pages>
      <page pageid="260" ns="0" title="Abakanskiy">
        <images>
          <im ns="6" title="File:Abakanskiy.jpg" />
        </images>
      </page>
    </pages>
  </query>
</api>
Run Code Online (Sandbox Code Playgroud)

到现在为止还挺好.

现在,无论我对查询做了什么,我都没有想出如何构建或检索图像的实际URL - 在这种情况下,它是

.../w/images/3/38/Abakanskiy.jpg
Run Code Online (Sandbox Code Playgroud)

我错过了一些明显的东西吗

我意识到存在一个天真的解决方案 - 获取包含图像的页面源,为标记解析它,然后从指定的URL获取图像 - 但是,如果可能的话,我宁愿使用API​​.

任何帮助,将不胜感激!

php url wiki mediawiki

2
推荐指数
1
解决办法
1009
查看次数

缩短"长"参数列表

我正在重构我的一个项目 - 购物车.我的代码紧密耦合的一个区域是"Viewer"类 - 为了生成供用户查看的信息,它通常需要两个或多个以下对象的组合:

  • 商店目录.
  • 客户的订单.
  • 客户的邮寄信息.

出于各种原因,我无法真正分解显示方法.

Martin Fowler的Refactoring将此视为"长参数列表"的气味.这里的相关重构是"引入参数对象".但是,我对此犹豫不决,因为这样做会将松散相关的数据耦合在一起.它也会让我锁定这三个对象之间非常狭窄的一对一关系 - 虽然这对我的应用程序来说就像现在一样,但它没有现实意义.(由于只有一个商店目录,因此可能存在许多"客户邮件信息"对象,并且每个对象可能与许多"客户订单"对象相关).

有没有人有这个优雅的解决方案?

refactoring

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