Questions tagged «design-patterns»

设计模式是解决软件设计中常见问题的通用可重用解决方案。当您对设计模式的实现有疑问时,请使用此标签来提问。请不要在有关文本模式匹配的问题上使用此标签。当在实现上遇到重磅问题时使用此标记-标记实现所使用的代码语言。


8
在PHP项目中,存在哪些模式来存储,访问和组织帮助器对象?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它当前不接受新的答案或互动。 在基于PHP的面向对象的项目中,如何组织和管理助手对象,如数据库引擎,用户通知,错误处理等? 假设我有一个大型PHP CMS。CMS分为各种类别。一些例子: 数据库对象 用户管理 用于创建/修改/删除项目的API 消息传递对象以向最终用户显示消息 上下文处理程序,可将您带到正确的页面 显示按钮的导航栏类 记录对象 自定义错误处理 等等 我正在处理一个永恒的问题,即如何最好地使这些对象可被需要它的系统的每个部分访问。 多年前,我的第一个方法是拥有一个$ application全局变量,其中包含这些类的初始化实例。 global $application; $application->messageHandler->addMessage("Item successfully inserted"); 然后,我切换到Singleton模式和工厂功能: $mh =&factory("messageHandler"); $mh->addMessage("Item successfully inserted"); 但我也不满意。单元测试和封装对我来说变得越来越重要,而据我所知,全局/单数背后的逻辑破坏了OOP的基本思想。 然后当然可以给每个对象一些指向它所需的辅助对象的指针,这可能是最干净,节省资源和易于测试的方式,但是从长远来看,我对此表示怀疑。 我研究过的大多数PHP框架都使用单例模式或访问初始化对象的函数。两种方法都很好,但是正如我所说,我都不满意。 我想扩大一下这里存在哪些常见模式的视野。我正在寻找从长期,真实世界的角度讨论此问题的示例,其他想法和指向资源的指针。 另外,我很想听听有关此问题的专业,利基或简单怪异的方法。
114 design-patterns  oop  php 

16
模式避免嵌套尝试捕获块?
考虑一种情况,我有三种(或更多种)执行计算的方法,每种方法都会因异常而失败。为了尝试每次计算直到找到成功的计算,我一直在进行以下操作: double val; try { val = calc1(); } catch (Calc1Exception e1) { try { val = calc2(); } catch (Calc2Exception e2) { try { val = calc3(); } catch (Calc3Exception e3) { throw new NoCalcsWorkedException(); } } } 是否有任何可接受的模式可以更好地实现这一目标?当然,我可以将每个计算包装在一个辅助方法中,该方法在失败时返回null,然后只使用??运算符,但是有一种更通用的方法(即,不必为我要使用的每个方法编写辅助方法) )?我曾考虑过使用泛型编写静态方法,该方法将任何给定的方法包装在try / catch中,并在失败时返回null,但是我不确定如何处理。有任何想法吗?

13
Singleton的替代品是什么
我们有一个类,其中包含应用程序的配置信息。它曾经是一个单身人士。经过一些体系结构审查后,我们被告知删除单例。我们确实看到了在单元测试中不使用单例的一些好处,因为我们可以同时测试不同的配置。 没有单例,我们必须在代码中的所有地方传递实例。变得如此混乱,所以我们写了一个单例包装器。现在,我们正在将相同的代码移植到PHP和.NET,我想知道是否可以为配置对象使用更好的模式。

13
桥接模式和策略模式有什么区别?
我试图阅读有关工厂,维基百科和许多站点的许多文章。我对桥接模式和策略模式之间的差异一无所知。 我知道它们都将抽象与实现分离开来,并且可以在运行时更改实现。 但是我仍然不知道在哪种情况下应该使用策略或在哪种情况下应该使用桥接。

8
Comet和jQuery [关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意测验或进一步的讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我已经对使用javascript的服务器推送进行了一些研究,发现普遍的共识是,我要寻找的是“ Comet”设计模式。是否在jQuery之上构建了该模式的任何良好实现?如果没有,那么该模式是否有任何好的实现?而且,无论这些问题的答案是什么,从实现的角度来看,是否有关于此模式的文档?

2
教义2中的代理是什么?
我刚读完所有《 Doctrine 2》文档,开始了自己的沙箱,了解了大多数原理,但是仍然有一个问题,我在文档中找不到任何完整的解释。 什么是Proxy课程? 我应何时在实体上使用它们? 据我了解,代理类增加了一层,可让您向实体添加其他功能,但是为什么要使用代理而不是在实体类中自己实现方法呢?


8
我在哪里使用代表?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 7年前关闭。 改善这个问题 在现实世界中,有哪些地方需要代表?我很好奇这种方法是最佳解决方案的情况或模式。无需代码。

8
凯尔·辛普森(Kyle Simpson)的OLOO模式与原型设计模式
凯尔·辛普森(Kyle Simpson)的“ OLOO(链接到其他对象的对象)模式”是否与原型设计模式有所不同?除了用专门表示“链接”(原型的行为)的东西创造出来,并澄清这里没有“复制”(类的行为)之外,他的模式究竟引入了什么? 这是Kyle在他的书“您不知道JS:this和Object Prototypes”中的示例: var Foo = { init: function(who) { this.me = who; }, identify: function() { return "I am " + this.me; } }; var Bar = Object.create(Foo); Bar.speak = function() { alert("Hello, " + this.identify() + "."); }; var b1 = Object.create(Bar); b1.init("b1"); var b2 = …



3
存储库和服务之间的区别?
存储库和服务之间有什么区别?我似乎不明白。 我说的是通过数据访问层进行数据访问,通常是使用linq to sql。 我经常看到带有简单CRUD方法的存储库,以及带有更多特定于业务的方法的服务。 我们可以以这篇博客文章为例。如果您查看底部的接口(图像),那么他有两个存储库和两个服务。一个人怎么知道放在哪里? 就像我说过的,对于CRUD式的操作,存储库似乎更多,而服务的存储则更面向业务。 谢谢

12
设计模式要避免[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 许多人似乎都同意,Singleton模式有很多缺点,甚至有人建议完全避免使用此模式。这里有一个很好的讨论。请将有关Singleton模式的任何评论导向该问题。 我的问题:是否有其他设计模式应避免或谨慎使用?

3
什么时候使用哪种设计模式?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我非常喜欢设计模式,但是很难找到何时可以应用的模式。我读过很多网站,其中解释了设计模式。我确实了解其中的大多数,但是我发现很难根据自己的情况识别模式。 所以,这就是为什么我问这个问题。在使用哪种设计模式时是否有任何准则/警报铃。 例如,如果要执行switch语句来确定需要创建的对象,则可能要使用工厂设计模式。因此,在这种情况下,switch语句是使用Factory模式的“警钟”。 那么,您知道更多确定设计模式的“警钟”吗?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.