软件设计

名称的方法只有副作用

因此,改变其对象的方法是 mutator 。一个不改变其对象但返回值(或引用到值)的方法是一个 getter 。有没有广泛使用的名称,一个方法不会改变它的对象,不返回一个值,但可能会改变作为参数传递给它的对象。也就是说,一种方法只会在对参数的各种影响中被调用。 如果您热衷于 ..
发布时间:2017-05-16 19:31:32 软件设计

Ruby模块可以被描述为单例类吗?

Ruby模块本质上只是一个只初始化一次的类, 包含MyModule 解决方案 一个ruby类是一个可以实例化的模块。像一个类,一个模块可以有方法,但你不能做一个模块的实例。这是他们之间的唯一区别。 在实践中,模块通常用于: 名字空格 Mixins 保留功能 名称空间 以下是用作名称空间的模块的示例: 模块MyLib class Foo e ..
发布时间:2017-05-16 19:31:20 软件设计

鼠标交互的设计模式

我需要一些关于一般鼠标 交互的“理想”设计模式的意见。 这里是简化的问题。我有一个小的3D程序(QT和openGL)和 我使用鼠标进行交互。每个交互通常不仅仅是一个 的单一函数调用,它主要由最多3个函数调用(启动,执行,最终化)执行。 例如,相机旋转:这里初始函数调用将传递当前的第一个鼠标位置 ,而执行功能调用将更新相机等。 但是,对于只有几个交互,这些(MousePress ..
发布时间:2017-05-16 19:31:08 软件设计

命令组合设计模式

有没有人在使用复合命令的Ruby中有一个很好的例子?它是一种设计模式混合,我已经看到在各种设计模式文献中提到这听起来相当强大,但还没有找到任何有趣的用例或代码。 解决方案 灵感来自一般想法和这个博客文章中的示例模式实现,这里是一个刺激它可能是什么样的: class CompositeCommand def initialize(description,command,undo) ..
发布时间:2017-05-16 19:30:27 软件设计

为什么工厂模式的工作方式呢?

我从来没有真正看过Factory模式,而今天决定花时间创建一个基于这篇文章的快速示例( http://msdn.microsoft.com/en-us/library/ee817667.aspx ),终于绕过我了。 源代码完美排列在三个独立的组件中,整齐地命名为产品,工厂和客户端。 主要的好处(据我所知)为Factory模式从“Client”类抽象出“产品”类的实例化。因此,在提供的示 ..
发布时间:2017-05-16 19:28:40 软件设计

Liskov替代原则是否也适用于实现接口的类?

LSP表示类可以替代它们的基类,这意味着派生类和基类在语义上是等价的。 但是,LSP也适用于实现接口?换句话说,如果一个类实现的接口方法在语义上与用户期望的不同,那么这被认为是违反LSP的? 谢谢 解决方案 否 适用于亚型。有关简要摘要,请参阅维基百科文章。 如果您有继承或扩展 A类的类B ,则应该可以切换 class A with class B ,一切都应该正常 ..
发布时间:2017-05-16 19:26:31 软件设计

Rails Devise宝石 - 通过在其他模型中分割来自定义默认用户模型

我已经尝试了devise rails gem,并且想知道分割多个模型中创建的用户模型属性的最佳方法。 现在,我的用户模型看起来如下,这是默认的设计行为: 用户(id:integer,email:string,encrypted_pa​​ssword:string, password_salt:string,reset_password_token:string,remember_to ..
发布时间:2017-05-16 19:26:19 软件设计

MVC是否定义一个控制器如何与另一个控制器进行通信?

我指的是一般的MVC设计模式(定义见维基百科)。当进行GUI密集型应用程序时,我通常会有许多控制器,有时一个控制器可以将事件发送给另一个控制器。 MVC一般定义了控制器应该如何与控制器通信?控制器可以是层次结构中更高的控制器的模型吗? 示例 假设我有一个窗口(由控制器/模型/视图表示),该窗口有能力启动另一个子窗口。子窗口是模态的,并且将接受某些输入。输入将影响主窗口中的某些进程。 ..
发布时间:2017-05-16 19:24:37 软件设计

设计模式:管理有限数量的资源

我正在设计一个系统功能的过程,我强烈地认为,必须有一个这样的模式,我应该知道在潜入代码之前。 场景是这样的: 我有一个资源池我的数量有限 我有不同数量的消费者使用这些资源;每个消费者只需要一个资源,并且在给定时间可能不会使用与任何其他消费者相同的资源。 消费者分为固定数量的组,系统需要以确保每个组中至少有一个资源。 每个组中的消费者数量随时间而变化;我们目前的做法是在启动时把资源 ..
发布时间:2017-05-16 19:22:38 软件设计

正确实施纪念碑

解决方案 不一定是使用纪念品设计模式,看守者是否是发起人的总和? 。 Memento背后的主要目的是,可以以统一,透明的方式处理不同的Originators(获得Memento,以后将其传回恢复状态)。 聚合关系不一定会阻止。 Caretaker的不同实例可能是不同发起者的集合(虽然Caretaker的一个实例仅涉及Originator的一个实例),并且仍然可以获得透明状态恢复的好处。 ..
发布时间:2017-05-16 19:22:22 软件设计

依赖注入用户输入的最佳策略是什么?

我使用了大量的依赖注入,但是我想在运行时获取用户处理信息的输入。 我有一个连接到com端口的类。我允许用户选择COM端口号。现在我有一个COM端口参数作为一个构造函数参数。推理是该类无法在没有该信息的情况下运行,并且具体实现(该类的模拟版本不需要com端口)。 替代方法是具有“启动”方法,该方法占用com端口,或具有设置com端口的属性。这使得它与IoC容器非常兼容,但从类的角度来看, ..

具有多个上下文的多种模式?

我想要grep搜索两种模式,并为每个匹配输出不同的上下文:例如,当它匹配“警告”时,输出1行之前和1行之后 - 当匹配“错误”时,输出1前线,后2行;所以我试过这个: $ echo -ne“1\\\ 2\\\ 3\\\ 4\\\ warning\\\ 5 \\\ 6\\\ 7\\\ 8\\\ erner\\\ 9\\\ 10\\\ 11\\\ 12\\\ “| grep -e“警告”-A ..
发布时间:2017-05-16 19:18:43 软件设计

可以有人以可靠的例子解释可插拔适配器的概念吗?

可以用很好的例子解释可插拔适配器的概念吗? 解决方案 从我从快速阅读中了解到的Google结果中,可插拔适配器是不适合特定适配器的适配器。在表面上(适配器自己的接口),它们都是一样的,但它可以适应不同接口的不同适配器。我发现这个主题很简单: 基本上,它允许您在适配器(接收器) 协议时放入 适配器在编译时不知道 通过使用反射。当您创建 适配器实例时,您将传递其调用 的 名称 ..
发布时间:2017-05-16 19:17:25 软件设计

服务器控件如何违反MVC设计模式?

我问的原因是tvanfosson(第一)评论他对另一个 我肯定知道ASP.NET服务器控件,我想我知道MVC设计模式,但是我不明白服务器控制违反MVC。 谢谢。 解决方案 Steven Sanderson的“Pro ASP.NET MVC 2框架”(第5页) “...在现实中,鼓励开发人员混合演示代码(例如,操纵服务器端控制树)与其应用程序逻辑(例如,操纵数据库数据)在这些相 ..
发布时间:2017-05-16 19:14:50 软件设计

了解DoFactory设计模式的UML - 装饰器

http://www.dofactory.com/Patterns/PatternDecorator.aspx 我不明白为什么会有装饰器和组件之间的“聚合”关系。 我相信它应该是组合,因为Decorator不可能没有基础组件。 解决方案 组合更强大的聚合,通常意味着该对象拥有其组件的所有权。在这种情况下并不是这样,因为装饰器没有装饰对象。此外,您可以删除装饰器,而不需要删除装饰 ..
发布时间:2017-05-16 19:14:18 软件设计

MVP - 多少主持人

通常的做法是一个View视图的主持人,另一个用于编辑视图,或者应该在一个演示者中。 解决方案 我遵循的经验法则是... - 1演示者1视图 但是,对于常用控件,如果演示文稿逻辑是一样的... 例如... 你有一个对话框控件为“确认对话框”,“操作完成对话框!”和许多其他变体... 为此我从一个共同的视图界面实现了这个控制,并有一个演示者服务于整套对话控件... 原因是它 ..
发布时间:2017-05-16 19:12:17 软件设计

Rails:用Null对象模式替换try

在我的大多数应用程序中,我有一个 current_user 方法。为了避免例如 current_user.name 其中 current_user 是 nil ,rails提供 try 方法。这个问题是我需要记住使用 try where current_user 可能是 nil 。 我想使用Null对象模式来消除额外的开销。 class NullUser def method_m ..
发布时间:2017-05-16 19:11:42 软件设计