我总是发现观察者模式几乎类似于通常的事件驱动方法。 实际上,我几乎相信它们实际上是指同一事物的不同名称。 它们都使用类似的概念来作为一个监听器,甚至在实现中,它们几乎是一样的,那就是有一个callback方法/函数来执行一个动作。 这至less在Java中。 在其他语言中说,Actionscript / Flex,事件更加用户友好,可能看起来不仅仅是观察者模式定义。 但是,这些概念听起来是一样的。 但这是真的吗? 观察者模式与通常的事件驱动编程风格是一样的吗?
对于一组exception类,一个好的devise是什么? 我看到围绕什么exception类应该和不应该做什么的各种东西,但不是一个简单的devise,易于使用和扩展,做这些事情。 exception类不应该抛出exception,因为这会直接导致进程终止,而没有任何logging错误的机会。 它需要能够得到一个用户友好的string,最好是本地化到他们的语言,所以如果它不能从错误中恢复,那么在应用程序终止之前有一些东西要告诉他们。 在堆栈展开时,需要添加信息,例如,如果xmlparsing器无法parsinginputstream,可以添加源文件或networking等。 exception处理程序需要轻松访问处理exception所需的信息 将格式化的exception信息写入日志文件(英文,所以在这里没有翻译)。 让1和4一起工作是我遇到的最大的问题,因为任何格式化和文件输出方法都可能失败。 编辑:所以看了几个类的exception类,并在尼尔链接到的问题,似乎是普遍的做法,完全忽略项目1(从而推动推荐),这似乎是一个相当糟糕的主意我。 无论如何,我想id也张贴我正在考虑使用的exception类。 class Exception : public std::exception { public: //enum for each exception type, which can also be used to determin //exception class, useful for logging or other localisation methods //for generating a message of some sort. enum ExceptionType { //shouldnt ever be thrown UNKNOWN_EXCEPTION = 0, […]
我知道只有一个根据.equals()的对象的实例被允许在一个Set中,如果你已经有了一个等价的对象,你不应该“需要”从Set中获取一个对象,但是我仍然想有一个.get()方法,返回Set(或null)中对象的实际实例,给定一个等效对象作为参数。 任何想法/理论为什么它是这样devise的? 我通常不得不通过使用Map来创build关键和值,或者类似的东西来解决这个问题。 编辑:我不认为人们理解我的问题到目前为止。 我希望确切的对象实例已经在集合中,而不是一个可能不同的对象实例,其中.equals()返回true。 至于为什么我想要这种行为,通常.equals()不考虑对象的所有属性。 我想提供一些虚拟的查找对象,并返回Set中的实际对象实例。
我是一名中级Haskell程序员,拥有严格的FP和非FP语言的丰富经验。 我的大多数Haskell代码分析中等大的数据集(10 ^ 6..10 ^ 9),所以懒惰总是潜伏着。 我对thunk,WHNF,模式匹配和共享有相当好的理解,并且我已经能够用爆炸模式和seq来修复泄漏,但是这种简介和祈祷方法感觉肮脏和错误。 我想知道Haskell程序员在devise时如何接近懒惰。 我不是问如Data.ByteString.Lazy或foldl'; 相反,我想知道如何考虑导致运行时内存问题和棘手的debugging的较低级别的懒惰机制。 在devise期间,你如何思考thunk,模式匹配和共享? 你用什么样的devise模式和习语来避免泄漏? 你是怎么学习这些模式和习语的,你有没有好的参考? 你如何避免过早优化不泄漏的非问题? (2014-05-15修订时间预算): 你预算大量的项目时间来寻找和解决内存问题? 或者,您的devise技巧通常是否会避免内存问题,并且在开发周期的早期就会获得预期的内存消耗?
我很好奇你怎么想? (我的意思是一种思维方式),关于你的图书馆,系统,框架等的devise架构,然后开始编码。 最近我发现自己感到痛苦,几乎每一次我都想从头开始。 我之前做过devise,在纸上绘制了一些scheme,并想象它会如何工作,但也许我做的是错误的方式? 例如,你如何决定你将需要什么界面,或者如何以最好的方式连接所有的东西? (前一天我有一个问题,我的朋友问我一个图书馆,我刚刚做了什么,而不是给他一个文件,我不得不给他3-4个文件,那是因为他们以某种方式连接..但不是在正确的我想:)所以这是我的错误devise..)
我很困惑的devisegemconfiguration设置: # The time the user will be remembered without asking for credentials again. config.remember_for = 2.weeks # The time you want to timeout the user session without activity. After this # time the user will be asked for credentials again. config.timeout_in = 10.minutes 我想有一个用户select“记住我”checkbox(即,让我login),但默认的会话超时是10分钟。 10分钟后,我要求我再次login,即使我点击了“记住我”。 如果这是真的那么remember_for是没有意义的。 显然我在这里错过了一些东西。
我一直在讨论DRY ( Do not Repeat Yourself )原则,也就是所谓的DIE ( 复制是邪恶的 ),有票,任何简单的代码重复总是邪恶的。 我想听听你对以下几点的看法: 不确定的未来 。 比方说,我们在两个地方有相同的代码。 关键是,这两个地方只有偶然的内涵。 有一种可能性,他们将来会有所不同,因为他们的语境和语义是不同的。 从这些地方抽象化并不便宜,如果其中一个地方发生了变化,那么抽象化就更加昂贵。 可读性 。 有一个复杂的计算涉及几个variables或步骤。 在另一个代码的地方还有另一个,有一些相同的部分。 问题是,如果我们拿出公共部分,计算的可读性会下降,创build抽象将很难给出一个描述性的名字。 更糟糕的是,如果某一部分algorithm在未来会像第一点那样变化的话。 上述情况是否有理由放弃抽象过程,只留下重复的代码,以利于将来更改或只是可读性的风险?
我正在为我的用户使用devise。 我最近安装了rails active gem ,一切都很好用。 不过,我不知道如何添加一个新的pipe理用户。 我可以看到,活动pipe理员创build了一个用户admin@example.com在数据库中的admin_user表,我用它来login界面。 我试着添加admin_user作为资源,这样我就可以在活动pipe理界面中点击添加pipe理用户button来添加一个新用户,但是这似乎不起作用。
你如何发送“命令”到RESTful服务器? 用例:我的服务器caching某些信息,以便在每次请求信息时不必读取数据库。 我需要一种方法来从我的客户端应用程序发送命令来告诉服务器刷新caching。 你会使用POST或PUT的一些URL,如“… / flush_cache”? “命令”并不是真正需要“具象状态传输”的数据,除非被传输的状态是命令的结果 – “切换closures”,“caching刷新”等。一般来说, REST发送命令到服务器?
我感兴趣的是这些游戏的协议(和游戏循环)是如何工作的; 任何指针或见解都被赞赏。 我猜测主循环会有一个每秒提前几个“滴答”的世界状态,但是玩家的命令是如何执行的呢? 什么样的数据需要来回?