小编gri*_*yvp的帖子

Java中松散耦合的良好模式?

我是Java新手,到目前为止阅读文档时,我找不到任何好的方法来编写对象之间的松散耦合.对于我所知道的大多数语言(C++,C#,python,JavaScript),我可以将对象管理为具有"信号"(关于某些事情发生/需要的事情的通知)和"插槽"(可以连接到信号和处理通知/做的方法)一些工作).在所有提到的语言中,我可以这样写:

Object1 = new Object1Class();
Object2 = new Object2Class();
Connect( Object1.ItemAdded, Object2.OnItemAdded );
Run Code Online (Sandbox Code Playgroud)

现在,如果object1调用/发出ItemAdded,将调用OnItemAdded方法Object2.这种松耦合技术通常被称为"代表","信号槽"或"控制反转".

与接口模式相比,所提到的技术不需要将信号分组到某些接口中.只要签名匹配,任何对象的方法都可以连接到任何委托(C++ Qt甚至通过仅允许部分签名匹配来扩展它).所以我不需要为每个方法/方法组编写额外的接口代码,为未使用的接口方法提供默认实现等.

我在Java中看不到这样的东西:(.也许我看错了方法?

java

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

继承,组合,聚合,委派的通用名称是什么?

将程序分成小对象后,这些对象必须与每个对象连接.哪里有不同类型的连接.继承,组合,聚合,委托.这些类型有多种类型和模式,如松耦合,紧耦合,控制反转,通过接口委托等.所提到的连接类型的正确通用名称是什么?我可以建议他们都被称为'耦合',但我在谷歌找不到任何好的分类,所以也许我试图使用错误的术语?也许有人知道一个可靠的,可信的分类,我可以使用术语吗?

terminology

5
推荐指数
3
解决办法
1249
查看次数

在哪里可以找到gcc警告和错误的完整列表?

有时我需要使用gcc进行跨平台工作,有时候gcc真的会因为它的警告而烦恼我.例如:

#pragma在主文件中一次

这是非常有用的警告,但我真的不知道gcc术语中的"主文件"是什么,为什么它不能包含#pragma一次:).那么,是否存在涵盖所有gcc警告和错误(主要是警告,错误都很简单)的文档,并对它们进行了一些评论?

gcc

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

如何在Visual Studio 2010 for C++中正确使用"代码分析"?

如果我安装了Windows 7和Visual Studio 2010 Premium SP1的全新副本,请创建向导生成的"C++控制台应用程序"并向该.cpp文件添加3个标头:

#include <winsock2.h>
#include <WS2tcpip.h>
#include <wspiapi.h>
Run Code Online (Sandbox Code Playgroud)

执行"运行代码分析"将在Microsoft代码中显示警告(项目本身是向导生成的,因此没有错误):

1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\ws2tcpip.h(729): warning C6386: Buffer overrun: accessing 'argument 1', the writable size is '1*4' bytes, but '4294967272' bytes might be written: Lines: 703, 704, 705, 707, 713, 714, 715, 720, 721, 722, 724, 727, 728, 729
1>c:\program files (x86)\microsoft sdks\windows\v7.0a\include\wspiapi.h(294): warning C6386: Buffer overrun: accessing 'argument 1', the writable size is '1' bytes, but '1025' bytes might be written: Lines: 263, 264, 265, …
Run Code Online (Sandbox Code Playgroud)

visual-studio-2010

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

是否可以在Tkinter中按名称搜索小部件?

如果我在Tkinter中创建一个小部件,我可以指定参与tcl/tk"小部件路径"概念的小部件名称.例如:

from Tkinter import *
button = Button( Frame( Tk(), name = "myframe" ), name = "mybutton" )
str( button ) == ".myframe.mybutton"
Run Code Online (Sandbox Code Playgroud)

是否有可能通过它的名字获取一个小部件,在我的例子中是"mybutton"?

python tkinter

5
推荐指数
2
解决办法
5675
查看次数

在使用mercurial和hgsubversion时是否可以支持非英语注释?

我现在用hgsubversion扩展测试mercurial.一切正常,除了颠覆评论:非拉丁字符显示为"?" 在HGWorkbench中,当使用注释中包含非拉丁字符的变更集时,它会因python编码错误而崩溃.是否有可能以某种方式修复此类行为或mercurial-subversion网桥不适用于非英语语言?

2012年4月12日更新

我检查了操作系统版本 - 该错误仅在Windows上显示.在Ubuntu上一切正常,非拉丁语注释正确显示.此外,这似乎是HGWorkbench应用程序问题:我复制了在Ubuntu中检出的存储库,它在Ubuntu中正确显示到Windows计算机中,我看到"?" 而不是非拉丁字符.

svn mercurial

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

是否可以使用Python编写Windows服务?

Python有一个win32service似乎允许创建Windows服务的包.我仔细检查了可用的google示例,例如这一个: 是否可以在Windows中将Python脚本作为服务运行?如果可能,怎么样?

我已~/Documents/test.py在提升的命令提示符下放入代码并执行以下操作:

> python test.py install
> python test.py debug
Run Code Online (Sandbox Code Playgroud)

不幸的是,我尝试的每个例子都失败了,错

Debugging service TestService - press Ctrl+C to stop.
Error 0xC0000005 - Python could find the service class in the module

AttributeError: 'module' object has no attribute 'AppServerSvc'

(null): (null)
Run Code Online (Sandbox Code Playgroud)

我在Windows 7 64位和Windows 8 64位上测试了最新版本的ActivePython(2.7.2.5 32位).当然,如果通过服务管理器手动启动服务,它也不会启动.

我做错了什么或者Python不打算用于现代操作系统上的服务创建?也许我需要特定版本的windows/python/pywin32?当然,我可以手动测试从Windows XP开始的所有组合,但这将需要很多时间:(.也许有人已经有Python和Windows服务的经验,并可以暗示我做错了什么?

更新

在Windows XP 32位虚拟macine上测试(相同的代码,相同的activepython发行版) - 同样的错误.

python windows

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

如何在python中获取完整的类型名称?

type()Python中的打印结果有时会显示不在当前范围内的类型名称.例如,将显示以下代码"<type 'frame'>"

import inspect
a = inspect.currentframe()
print( type( a ) )
Run Code Online (Sandbox Code Playgroud)

frame目前范围内没有类型!如果我尝试在交互式解释器中使用它,我会收到一个错误:

>>> frame
NameError: name 'frame' is not defined
Run Code Online (Sandbox Code Playgroud)

那么有什么方法可以得到像"inspect.something.frame"这样的"完全限定"类型名称,所以我可以在我的代码中引用它吗?

UPDATE

不幸的是,__module__它也不起作用:

>>> type( a ).__module__
'__builtin__'
Run Code Online (Sandbox Code Playgroud)

python

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

如何在Windows上正确使用node.js child_process.spawn()重定向?

我有一个干净的Windows 8.1框,安装了lates node.js(v0.10.29).我在两个文件中有以下测试代码:

a.js

var sub = require('child_process').spawn('node', ['b.js'], {silent: true});
sub.stdout.on("data", function (data) {console.log(data.toString());});
Run Code Online (Sandbox Code Playgroud)

b.js

console.log("DEBUG 1");
console.log("DEBUG 2");
process.exit();
Run Code Online (Sandbox Code Playgroud)

如果我a.ja通过执行:

node a.js
Run Code Online (Sandbox Code Playgroud)

我将在控制台输出中看到"DEBUG 1" - 但不是"DEBUG 2".如果我删除process.exit(),两行将正确显示.这种奇怪的行为发生在forkspawn.

任何提示?相同的代码在linux上没有问题.

更新02.07.2014

似乎这不是exit()和log()之间的竞争条件,因为将其更改为纯序列会产生相同的错误:

function print(text, next) { console.log(text); next(); }
print("DEBUG 1", function () {
  print("DEBUG 2", function () {
    process.exit();
  });
});
Run Code Online (Sandbox Code Playgroud)

更新03.07.2014

silent未列在spawn()文档中,但它有效.它列在fork文档中,正如我之前提到的,这个问题与之相同fork.

似乎如果我在上一次输出和process.exit()所有工作之间引入延迟正确:

console.log("DEBUG 1");
console.log("DEBUG 2");
setTimeout(function () {process.exit();}, 10000); …
Run Code Online (Sandbox Code Playgroud)

node.js

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

是否可以在Windows 10上创建支持ipv4的Docker Machine?

如果安装了新的Windows 10 pro和最新的1.13.1(10072)"Docker for Windows",如果我通过以下方式创建新机器:

docker-machine create --driver hyperv node1
Run Code Online (Sandbox Code Playgroud)

机器只附加了ipv6地址.简单的命令docker ssh node1会起作用,但如果我尝试像"docker swarm"这样的高级命令,它将会失败:

$ docker-machine ls
NAME    ACTIVE   DRIVER   STATE     URL                                     SWARM   DOCKER    ERRORS
node1   -        hyperv   Running   tcp://[fe80::215:5dff:fe0f:ae10]:2376           v1.13.1
Run Code Online (Sandbox Code Playgroud)

是否可以创建和使用IPv4 docker机器,或者它不打算在Windows机器上使用?

docker docker-machine

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