有哪些最佳实践可以协调View中复杂组件之间的交互?
我不是在谈论像组合框或网格控件这样的简单小部件,而是由多个小部件组成的组件,这些组件可能值得单独进行单元测试.
你会:
更新:我从#1-3中删除"让控制器......",因为在这些情况下,控制器不一定需要进行路由/编排.它可能是视图本身.
我在最近的一个项目中采用了方法#3,我很满意组件的解耦和个体可测试性.但是,我觉得我可以简化组件的接线.在我的例子中,主View对象必须在每个组件上添加多个事件侦听器,然后在有时进行一些本地处理(比如与模型交谈)之后调用适当组件上的方法.添加事件处理程序的代码看起来有点乱,我特别想找到一种干净的方法.
我目前正在使用在我意识到Rails存在之前设计的数据库开发Rails应用程序.
我目前已经创建了一些迁移,以向现有表添加一些新表和新列.
我想让迁移重新创建完整的数据库.
我应该遵循哪些步骤?
我应该手动创建所有迁移吗?
编辑:我感兴趣的是不在数据库内容中的数据库模式
我试图在Ruby中设置我的DOS环境变量,并在脚本退出后保持它.例如,如果我想要一个ruby脚本set_abc_env.rb将环境变量'ABC'设置为'blah',我希望运行以下命令:
C:> echo %ABC%
C:> set_abc_env.rb
C:> echo %ABC% blah
Run Code Online (Sandbox Code Playgroud)
我该怎么做呢?
我经常在C++中使用execv()函数,但是如果某些参数是在C++字符串中.令我很生气的是我不能这样做:
const char *args[4];
args[0] = "/usr/bin/whatever";
args[1] = filename.c_str();
args[2] = someparameter.c_str();
args[3] = 0;
execv(args[0], args);
Run Code Online (Sandbox Code Playgroud)
这不会编译,因为execv()接受与const char*不兼容的char*const argv []所以我必须使用strdup()将我的std :: strings复制到字符数组,这很痛苦.
有谁知道这个的原因?
我试图在JavaScript和.Net中生成等效的MD5哈希值.还没有做过,我决定使用第三方计算 - 这个网站上的"密码"这个词.我稍后会添加盐,但目前,我无法获得.net版本以匹配网站的哈希:
5f4dcc3b5aa765d61d8327deb882cf99
Run Code Online (Sandbox Code Playgroud)
我猜它是一个编码问题,但我已经尝试了8种不同的方法来计算.Net中的MD5哈希,并且它们都没有我在JavaScript(或从网站)中获得的.这个MSDN示例是我尝试过的方法之一,这导致我通常收到的这个哈希:
7c6a180b36896a0a8c02787eeafb0e4c
Run Code Online (Sandbox Code Playgroud)
编辑:可悲的是,我不小心为两个不同的实现提供了不同的源字符串.EBSAK.: - /仍然有兴趣听听你对后续行动的回答.
额外问题:什么编码/格式最适合在数据库中存储散列值?
我需要在用户更改源文件时对源文件中的某些模式进行大量搜索,因此我需要进行时间和内存高效的正则表达式匹配.模式重复,所以应该编译一次,但我需要能够检索子部分(而不是只是确认一个匹配)
我正在考虑使用java.util.regexp或Jakarta perl5util(如果它仍然存在,我使用它已经过了几年),或者可能是Eclipse搜索引擎,虽然我怀疑它更聪明.
这两者之间是否存在显着的性能差异?
我做了一些单元测试(在测试课上).我读过的教程说我应该为单元测试做一个TestSuite.
奇怪的是,当我直接运行单元测试时(选择测试类 - 运行为jUnit测试)一切正常,但是当我在测试套件中尝试同样的事情时,总会有一个异常:java.lang.例外:没有可运行的方法.
以下是测试套件的代码:
import junit.framework.Test;
import junit.framework.TestSuite;
public class AllTests {
public static Test suite() {
TestSuite suite = new TestSuite("Test suite for com.xxx.yyyy.test");
//$JUnit-BEGIN$
suite.addTestSuite(TestCase.class);
//$JUnit-END$
return suite;
}
}
Run Code Online (Sandbox Code Playgroud)
任何想法为什么这不起作用?
假设我的对象处于完美的工作状态(即TDD让我觉得它们有效).
我有一个我这样创建的列表(正确缩进除外):
var result = from v in vendors
from p in v.Products
orderby p.Name
select p;
Run Code Online (Sandbox Code Playgroud)
这有效 - 我从所有供应商处获得所有产品.
现在我有一个条件列表,由用户在运行时构建.让我们应用它们:
foreach (Attribute a in requiredAttributes)
{
result = result.Where(p => p.Attributes.Contains(a));
}
Run Code Online (Sandbox Code Playgroud)
这可能是原始的,但我认为它有用.但是,在完成此foreach循环之后,当您枚举"result"时,它将包含其Attributes属性(也是集合)中具有requiredAttributes集合的LAST属性的所有产品.
对我来说,这种气味就像"a"被覆盖在某个地方,每次旅行通过循环,只有最后一个适用.
如果没有以某种方式将扩展方法写入IEnumerable,称为ContainsAll(IEnumerable)或其他类似的东西,我怎么能实现我想要的,这基本上是一个逻辑AND,只给我那些具有所有必需属性的产品?