Questions tagged «design-patterns»

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


14
为什么所有Active Record都讨厌?[关闭]
按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 随着我越来越了解OOP,并开始实现各种设计模式,我不断回到人们讨厌Active Record的情况。 人们常常说它的伸缩性不好(以Twitter为例),但实际上没有人解释为什么伸缩性不好。和/或如何在没有缺点的情况下实现AR的优点(通过类似但不同的模式?) 希望这不会成为关于设计模式的一场圣战-我只想特别地了解一下Active Record的问题。 如果扩展性不好,为什么不呢? 还有什么其他问题?

8
组织jQuery / JavaScript代码的最佳方法(2013)[关闭]
在这里很难说出要问什么。这个问题是模棱两可的,模糊的,不完整的,过于宽泛的或修辞性的,不能以目前的形式合理地回答。如需帮助澄清此问题以便可以重新打开, 请访问帮助中心。 7年前关闭。 问题 这个答案以前已经被回答过,但是它是旧的并且不是最新的。我在一个文件中有2000行以上的代码,众所周知,这是一种不好的做法,尤其是当我浏览代码或添加新功能时。无论现在还是将来,我都希望更好地组织代码。 我应该提到的是,我正在构建一个工具(不是简单的网站),该工具在全局范围内具有许多按钮,UI元素,拖放,动作侦听器/处理程序和功能,其中多个侦听器可能使用同一功能。 范例程式码 $('#button1').on('click', function(e){ // Determined action. update_html(); }); ... // Around 75 more of this function update_html(){ .... } ... 更多示例代码 结论 我确实需要组织此代码以使其最佳使用,而不是重复自己,并且能够添加新功能并更新旧功能。我将自己解决这个问题。有些选择器可能是100行代码,另一些则是1行。我看了一眼require.js,发现它有些重复,实际上编写了比所需更多的代码。我愿意接受任何符合此条件的解决方案,并且链接到资源/示例始终是一个加号。 谢谢。

7
为什么要使用Publish / Subscribe模式(在JS / jQuery中)?
因此,一位同事向我介绍了发布/订阅模式(在JS / jQuery中),但是我很难理解为什么人们会在“常规” JavaScript / jQuery上使用这种模式。 例如,以前我有以下代码... $container.on('click', '.remove_order', function(event) { event.preventDefault(); var orders = $(this).parents('form:first').find('div.order'); if (orders.length > 2) { orders.last().remove(); } }); 例如,我可以看到这样做的优点。 removeOrder = function(orders) { if (orders.length > 2) { orders.last().remove(); } } $container.on('click', '.remove_order', function(event) { event.preventDefault(); removeOrder($(this).parents('form:first').find('div.order')); }); 因为它引入了removeOrder针对不同事件等重复使用功能的能力。 但是,如果执行相同的操作,为什么还要决定实现发布/订阅模式并采用以下长度呢?(仅供参考,我使用jQuery tiny pub / sub) …

15
Java中if语句的详细列表
抱歉,找不到答案,我几乎可以肯定有人提出过这个问题。 我的问题是我正在编写一些系统库来运行嵌入式设备。我有可以通过无线电广播发送到这些设备的命令。这只能通过文本来完成。在系统库中,我有一个线程来处理看起来像这样的命令 if (value.equals("A")) { doCommandA() } else if (value.equals("B")) { doCommandB() } else if etc. 问题在于,要执行的命令很多,很快就会变成无法控制的事情。几个月后,看起来很恐怖,调试起来很痛苦,难以理解。

14
单页JavaScript Web应用程序的体系结构?
如何在客户端上构建复杂的单页JS Web应用程序?具体来说,我很好奇如何根据应用程序的模型对象,UI组件,任何控制器以及处理服务器持久性的对象来干净地构建应用程序。 起初,MVC似乎很合适。但是,由于UI组件嵌套在不同的深度(每个组件都有自己的作用于模型数据/对模型数据进行响应的方式,并且每个组件都会生成它们自己可能会或可能不会直接处理的事件),因此似乎无法完全应用MVC。(但如果不是这种情况,请纠正我。) - (此问题提出了关于使用ajax的两个建议,显然,除了最简单的一页应用程序之外,其他任何东西都需要使用ajax。)


6
ASP.NET MVC-控制器中是否应该存在业务逻辑?
几天前,Derik Whitaker发表了一篇文章,达到了我一直以来很好奇的一点:控制器中是否应该存在业务逻辑? 到目前为止,我见过的所有ASP.NET MVC演示都将存储库访问和业务逻辑放在了控制器中。有些人甚至还在那里进行验证。这导致相当大的,肿的控制器。这真的是使用MVC框架的方式吗?看来这最终将导致许多重复的代码和逻辑散布在不同的控制器上。

9
Node.js中的Singleton模式-是否需要?
最近,我碰上了这篇文章如何写在Node.js的一个单 我知道require 状态文档: 第一次加载模块后将对其进行缓存。多次调用require('foo')可能不会导致模块代码多次执行。 因此,似乎每个所需的模块都可以轻松地用作单例,而无需单例样板代码。 题: 上面的文章是否提供了有关创建单例的解决方案?


9
不使用存储库模式,请按原样使用(EF)ORM
我一直使用存储库模式,但是对于我的最新项目,我想看看是否可以完美使用它以及实现“工作单元”。我越开始挖掘,就会开始问自己一个问题:“我真的需要吗?” 现在,这一切都从对Stackoverflow的一些评论开始,并追溯到Ayende Rahien在他的博客上的帖子,其中包括2个具体的, 存储库是新的单例 询问没有存储库的阿连德生活,他们值得生活 这可能永远被谈论,并且取决于不同的应用程序。我想知道什么 这种方法是否适合实体框架项目? 使用这种方法是业务逻辑仍在服务层中,还是扩展方法(如下所述,我知道扩展方法是使用NHib会话)? 使用扩展方法很容易做到。干净,简单且可重复使用。 public static IEnumerable GetAll( this ISession instance, Expression<Func<T, bool>> where) where T : class { return instance.QueryOver().Where(where).List(); } 使用这种方法并Ninject作为DI,我是否需要制作Context一个接口并将其注入控制器中?

17
战略模式的真实例子
我一直在阅读有关OCP主体以及如何使用策略模式来实现此目的的信息。 我打算尝试向几个人解释这一点,但是我能想到的唯一示例是根据“订单”的状态使用不同的验证类。 我已经在线阅读了几篇文章,但这些文章通常不会描述使用该策略的真实原因,例如生成报告/账单/验证等。 您是否认为现实世界中有常见的策略模式示例?

14
实用程序类是邪恶的吗?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我看到了这个线 如果“实用程序”类是邪恶的,那么我应将通用代码放在哪里? 想过为什么实用程序类是邪恶的? 可以说我有一个深度类很多的领域模型。我需要能够xml-ify实例。我是否在父对象上创建toXml方法?我是否要创建MyDomainXmlUtility.toXml帮助器类?在这种情况下,业务需求跨越了整个域模型-它真的属于实例方法吗?如果应用程序的xml功能上有一堆辅助方法,那该怎么办?

8
有什么模式可以模拟棋盘游戏吗?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 为了娱乐,我正在尝试将我儿子最喜欢的棋盘游戏编写为一款软件。最终,我希望在其之上构建一个WPF UI,但是现在我正在构建用于对游戏及其规则进行建模的机器。 在这样做的过程中,我不断看到许多棋盘游戏常见的问题,也许其他问题已经比我更好地解决了。 (请注意,玩游戏的人工智能以及围绕高性能的模式对我来说并不有趣。) 到目前为止,我的模式是: 代表游戏箱中实体的几种不可变类型,例如骰子,棋盘,纸牌,棋盘,棋盘上的空间,金钱等。 每个玩家的对象,其中包含玩家的资源(例如金钱,分数),他们的姓名等。 代表游戏状态的对象:玩家,轮到谁,棋盘上的香料的布局等。 管理转弯顺序的状态机。例如,许多游戏都有一个小型的赛前游戏,每个玩家都可以滚动查看谁先出局。那是开始状态。当一个玩家开始回合时,他们先滚动,然后移动,然后必须在原地跳舞,然后其他玩家猜测他们是哪种鸡,然后获得积分。 我可以利用某些现有技术吗? 编辑:最近我意识到的一件事是,游戏状态可以分为两类: 游戏神器状态。“我有10美元”或“我的左手在蓝色上”。 游戏序列状态。“我翻了两次,下一场使我入狱了。” 在这里,状态机可能有意义。 编辑:我在这里真正寻找的是实现象棋,拼字游戏或大富翁这样的多人回合制游戏的最佳方法。我敢肯定,只要从头到尾完成游戏,就可以创建这样的游戏,但是,就像其他设计模式一样,可能有一些使事情变得更加顺利的方法,而这需要仔细研究才能发现。这就是我所希望的。

17
C#中的工厂模式:如何确保只能由工厂类创建对象实例?
最近,我一直在考虑保护我的一些代码。我很好奇如何确保一个对象永远不能直接创建,而只能通过工厂类的某种方法来创建。让我们说我有一些“业务对象”类,并且我想确保该类的任何实例都具有有效的内部状态。为了实现这一点,我将需要在创建对象之前(可能是在其构造函数中)执行一些检查。没关系,直到我决定我要使此检查成为业务逻辑的一部分。因此,如何安排业务对象只能通过我的业务逻辑类中的某种方法创建而不能直接创建?使用C ++的旧“ friend”关键字的第一个自然愿望将与C#脱节。所以我们需要其他选择... 让我们尝试一些示例: public MyBusinessObjectClass { public string MyProperty { get; private set; } public MyBusinessObjectClass (string myProperty) { MyProperty = myProperty; } } public MyBusinessLogicClass { public MyBusinessObjectClass CreateBusinessObject (string myProperty) { // Perform some check on myProperty if (true /* check is okay */) return new MyBusinessObjectClass …

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.