是否可以通过应用状态机模式来改进所有编写的代码?
我正在开发一个项目,这是一个可怕的,可怕的,错误的,破碎的意大利面条代码.我从这个博客中复制了Martin Fowler的示例状态机代码,并将整个垃圾堆转换为一系列语句.字面上只是一个国家,事件,过渡和命令的列表.
我无法相信这种转变.代码现在很干净,而且很有效.当然我之前已经了解过State Machines,甚至已经实现了它们,但在Martin Fowler的例子中,模型/配置的分离是惊人的.
这让我觉得我所做过的几乎所有事情都可以通过某种方式从这种方法中受益.我希望在我使用的每种语言中使用此功能.也许这应该是语言级别的功能.
有人认为这是错的吗?或者任何人都有不同模式的类似经历?
我想将多张图片上传到我的Rails 3应用程序.我目前正在使用Paperclip上传图片,并且我将一些后期处理操作分配给模型Photo.
我在网上看到了一些示例(集成了uploadify,swfupload或其他一些库),但没有一个非常详细,每个都错过了一些步骤.
最简单的方法是什么?
我有静态类,包含一些信息
public static class SampleDataCache
{
private static Dictionary<string,SampleData> cacheDict = new Dictionary<string,object>()
public static Get(string key)
{
if(!cacheDict.Contains[key])
cacheDict.Add(key,new SampleData());
return cacheDict[key];
}
}
Run Code Online (Sandbox Code Playgroud)
当我刷新页面时,我希望SampleDataCache保留其数据.
我能以简单的方式实现这一目标吗?
我正在将模型中的对象属性复制到另一个模型中;
@estimate = Estimate.find(params[:estimate_id])
@invoice = Invoice.create(@estimate.attributes)
Run Code Online (Sandbox Code Playgroud)
使用此副本,它只是复制模型属性,(估计副本为新发票)但估计模型和发票模型与"项目"模型具有HABTM关系.
如何用Estimate和它的Item一起创建新的@invoice对象?困惑...
更新:
谢谢.
我试图在每个单击上使字体大小更大,但它只做一次这里是我的代码.
<a href="5">add</a>
<script type="text/javascript">
$('a').live('click', function(e){
e.preventDefault();
var link = $(this).attr('href');
var num = link+20;
var font = {color:"#993300", fontSize:num+"px"};
$("p").css(font);
return false;
});
</script>
Run Code Online (Sandbox Code Playgroud)
任何帮助???
我有一个问题,即偶尔会从Q中读取一条消息.我正在使用.NET包装器为MQSeries(amqmdnet.dll)并使用Win Service读取消息.
Here's how I do it with VB.NET:
'QManager
Dim properties As Hashtable = New Hashtable(4)
properties.Add(MQC.TRANSPORT_PROPERTY, MQC.TRANSPORT_MQSERIES_CLIENT)
properties.Add(MQC.CHANNEL_PROPERTY, channelName)
properties.Add(MQC.HOST_NAME_PROPERTY, iPAddress)
properties.Add(MQC.PORT_PROPERTY, port)
QManager = New MQQueueManager(queueManagerName, _
properties)
'Q itself
getMessageOptions.Options = _
MQC.MQGMO_FAIL_IF_QUIESCING Or _
MQC.MQGMO_WAIT Or _
MQC.MQGMO_SYNCPOINT
getMessageOptions.WaitInterval = 1000 ' read from config
Dim locker As New Object
System.Threading.Monitor.Enter(locker)
Q.Get(message, getMessageOptions)
QManager.Commit()
System.Threading.Monitor.Exit(locker)
Run Code Online (Sandbox Code Playgroud)
我听说Q.Get(message,getMessageOptions)使消息对其他读者不可用,QManager.Commit反过来只是从Q中删除消息(类似于.NET Peek&Dequeue).这本身应该消除对Monitor的需求.
在我的Win Service中,多个线程读取Q并且我们怀疑由于轮询间隔较低(100ms或更短),包装器没有足够的时间来更新消息的"Read"标志,因此它被多次拾取通过重叠线程.历史上,相同的消息最多可读取四次.
在增加轮询间隔之前,我想确定我是否以正确的方式做事.任何人都可以用我的方法建议任何问题吗?
谢谢.
构建的一个选项是在构建时打包特定于环境的属性(例如,使用maven配置文件)
另一个选择是设置-Denv=production您的生产环境,并在启动时加载/${env}/config.properties.(春天允许这样,但它可以手动完成)
我用过这两个.前者意味着没有额外的环境配置.后者允许在多个环境中使用相同的构建.
问题:任何其他重要的利弊,或几乎相同的方法将被选择?
我正在为Eclipse创建一个小插件来(重新)以编程方式启动LaunchConfigurations.
我可以启动配置,但是我希望增强以下代码,以便在启动之前首先关闭具有给定名称的所有正在运行的配置.
public void restartLaunchConfiguration(String configurationName) throws Exception {
final ILaunchManager manager = DebugPlugin.getDefault().getLaunchManager();
for(final ILaunchConfiguration cfg : manager.getLaunchConfigurations()){
final String cfgName = cfg.getName();
if(!configurationName.equals(cfgName)) continue;
cfg.launch("debug", null);
break;
}
}
Run Code Online (Sandbox Code Playgroud)
如何获取所有正在运行的配置?
如何停止正在运行的配置?
是否可以创建具有可变数量的组的正则表达式?
例如运行之后......
Pattern p = Pattern.compile("ab([cd])*ef");
Matcher m = p.matcher("abcddcef");
m.matches();
Run Code Online (Sandbox Code Playgroud)
...我想有类似的东西
m.group(1) = "c"m.group(2) = "d"m.group(3) = "d"m.group(4)= "c".(背景:我正在解析一些数据行,其中一个"字段"正在重复.我想避免matcher.find这些字段的循环.)
我需要使用pg_dump命令备份本地服务器两个postgresql数据库到远程主机,而不是使用ssh.本地服务器和远程主机都安装postgresql.
我该怎么做 ?
如:
数据库名称:A,B
本地服务器:1.2.3.4
远程服务器:5.6.7.8
谢谢!
java ×2
.net ×1
architecture ×1
backup ×1
build ×1
c# ×1
caching ×1
click ×1
deployment ×1
eclipse ×1
eclipse-pde ×1
eclipse-rcp ×1
file-upload ×1
host ×1
ibm-mq ×1
jquery ×1
paperclip ×1
postgresql ×1
regex ×1
ruby ×1
silverlight ×1