Questions tagged «design-patterns»

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

7
C中是否有任何“设计模式”?[关闭]
从目前的情况来看,这个问题不适合我们的问答形式。我们希望答案能得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 8年前关闭。 我知道设计模式通常与OO编程相关,但是您在编程C时是否经常使用某些模式? 我对经典OO模式的简单翻译不感兴趣,请不要提及Duff的设备。;-)


4
Node.js应用程序的授权方法和设计模式
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 2年前关闭。 改善这个问题 我正在为内部企业软件平台构建多页管理界面。考虑将各种API,数据库查询和Shell脚本捆绑在一起的大量粘合逻辑。 我们将使用node.js,express框架(包括jade模板)和LDAP进行身份验证。 我正在努力寻找有关节点应用程序中授权的设计模式和最佳实践的信息。最好是,我希望使用基于角色的模型,因为我的用户熟悉该方法及其护理和提供方法。 我是node.js的新手,所以请不要以为我已经看过模块或热门博客文章。可能有很多信息,我根本不知道在哪里看。 预先感谢您能够提供的任何信息!


10
线程安全C#单例模式
我对此处记录的单例模式有一些疑问:http : //msdn.microsoft.com/en-us/library/ff650316.aspx 以下代码摘自该文章: using System; public sealed class Singleton { private static volatile Singleton instance; private static object syncRoot = new object(); private Singleton() {} public static Singleton Instance { get { if (instance == null) { lock (syncRoot) { if (instance == null) instance = new Singleton(); } …

14
使用try / catch防止应用崩溃
我一直在开发一个Android应用程序,该应用程序try/catch经常使用以防止它崩溃,即使在不需要的地方也是如此。例如, 在视图xml layout与id = toolbar被引用,如: // see new example below, this one is just confusing // it seems like I am asking about empty try/catch try { View view = findViewById(R.id.toolbar); } catch(Exception e) { } 在整个应用程序中都使用这种方法。堆栈跟踪没有打印出来,很难找到问题所在。该应用程序突然关闭,而不打印任何堆栈跟踪。 我请我的长辈向我解释一下,他说: 这是为了防止生产崩溃。 我完全不同意。对我来说,这不是防止应用程序崩溃的方法。它表明开发人员不知道自己在做什么,并且对此表示怀疑。 这是行业中用来防止企业应用程序崩溃的方法吗? 如果try/catch确实是我们的真正需求,那么是否可以将异常处理程序与UI线程或其他线程连接,并在那里捕获所有内容?如果可能的话,那将是一个更好的方法。 是的,为空try/catch很不好,即使我们将堆栈跟踪或日志异常打印到服务器,try/catch对我来说,将代码块随机地包装在所有应用程序中也没有意义,例如,将每个函数都包含在try/catch。 更新 由于这个问题引起了广泛关注,并且有些人误解了这个问题(也许是因为我没有清楚地表述),所以我将其重新表述。 这是开发人员在这里所做的 一个函数是经过编写和测试的,它可以是一个仅初始化视图的小函数,也可以是一个复杂的函数,在测试后将其包裹在try/catch块中。即使对于永远不会抛出任何异常的函数。 在整个应用程序中都使用了这种做法。有时打印堆栈跟踪,有时只是打印debug log一些随机错误消息。此错误消息因开发人员而异。 通过这种方法,应用程序不会崩溃,但是应用程序的行为无法确定。即使在某个时候,也很难跟踪出了什么问题。 …

4
jQuery库中使用的设计模式
jQuery高度关注DOM,并围绕DOM提供了很好的抽象。在此过程中,它利用了昨天刚刚打动我的各种众所周知的设计模式。装饰器模式就是一个明显的例子。jQuery对象围绕常规DOM对象提供了新的附加功能。 例如,DOM具有本机的insertBefore方法,但是没有相应的insertAfter方法。有多种实现方式可以填补这一空白,而jQuery是一个提供此功能的此类库: $(selector).after(..) $(selector).insertAfter(..) 还有许多其他示例在jQuery中大量使用Decorator模式。 您是否注意到库本身还包含其他大小的设计模式示例?另外,请提供模式用法的示例。 我把它变成一个社区Wiki,因为我相信人们喜欢jQuery的各种事情都可以追溯到众所周知的设计模式,只是这些模式的名称通常不提及它们。这个问题没有答案,但是对这些模式进行分类将提供对库本身的有用见解。

4
如何将Log4net与依赖注入一起使用
我试图找出依赖注入框架对log4net的正确模式和用法。 Log4Net使用ILog界面,但需要我打电话 LogManager.GetLogger(Reflection.MethodBase.GetCurrentMethod().DeclaringType) 在每个需要记录信息的类或方法中。这似乎违反了IoC原则,使我不得不使用Log4Net。 我应该以某种方式在某处放置另一层抽象吗? 另外,我需要这样记录自定义属性,例如当前用户名: log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName; 我如何封装它,这样我就不必记住每次都要做,而仍然保持当前正在记录的方法。我应该做这样的事情还是我完全错过了分数? public static class Logger { public static void LogException(Type declaringType, string message, Exception ex) { log4net.ThreadContext.Properties["userName"] = ApplicationCache.CurrentUserName; ILog log = LogManager.GetLogger(declaringType); log.Error(message, ex); } }

9
C#是否有更好的等待模式?
我发现自己已经对这种类型的东西进行了几次编码。 for (int i = 0; i < 10; i++) { if (Thing.WaitingFor()) { break; } Thread.Sleep(sleep_time); } if(!Thing.WaitingFor()) { throw new ItDidntHappenException(); } 它看起来像是不良代码,是否有更好的方法可以做到?这是不良设计的征兆吗?

3
Javascript:模块模式与构造器/原型模式?
我想知道模块模式或Constructor / protoType模式是否更适合我的工作。 基本上,我使用的是不引人注目的javascript-HTML文档具有对.js文件的引用。 我对模块模式的理解: 调用INIT方法(基本上是一个公共方法,我可以使用模块模式创建和返回) 在INIT方法中,分配所有点击事件等。 这听起来很适合我的情况,因为我不需要创建对象和继承层次结构等。 我对构造函数/原型模式的理解: 用于创建对象 用于使用继承(即超类型的子类型) 我是对的,对于提供简洁的JavaScript,模块模式是理想的吗?

7
为什么在双重检查锁定中使用了volatile
在Head First设计模式手册中,具有双重检查锁定的单例模式已实现如下: public class Singleton { private volatile static Singleton instance; private Singleton() {} public static Singleton getInstance() { if (instance == null) { synchronized (Singleton.class) { if (instance == null) { instance = new Singleton(); } } } return instance; } } 我不明白为什么volatile要使用它。volatile使用不会 违反使用双重检查锁定(即性能)的目的吗?


7
设计C#类库时,何时应选择通过接口继承?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 我有一个数字Processor类,可以做两种非常不同的事情,但是是从通用代码中调用的(“控制反转”情况)。 我想知道在决定它们是否都应该继承自BaseProcessor或实现IProcessor为接口时,我应该了解哪些设计考虑因素(或者对您来说是对用户有用的认识)。

14
大型Switch语句:糟糕的OOP?
我一直认为,大型switch语句是OOP设计不良的征兆。过去,我已经阅读了讨论该主题的文章,他们提供了基于OOP的替代方法,通常基于多态来实例化处理案例的正确对象。 我现在处在一个奇怪的switch语句的情况下,该语句基于来自TCP套接字的数据流,该协议中的协议基本上由换行符终止命令,随后的数据行和结束标记组成。该命令可以是100个不同命令中的一个,因此我想找到一种方法来将此怪物切换语句减少为更易于管理的内容。 我已经进行了一些谷歌搜索来找到我记得的解决方案,但是可悲的是,如今,对于许多类型的查询,谷歌已经变成了无关紧要的结果。 有没有解决此类问题的模式?关于可能的实现有什么建议吗? 我曾经想到的是使用字典查找,将命令文本与要实例化的对象类型进行匹配。这具有仅创建一个新对象并为任何新命令在表中插入新命令/类型的优点。 但是,这也存在类型爆炸的问题。现在,我需要100个新类,此外,我还必须找到一种将它们与数据模型完全接口的方法。“一个真正的转换声明”真的可行吗? 非常感谢您的想法,意见或评论。

5
空接口代码是否有异味?[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 5年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我有一个函数返回相同类型的对象(查询结果),但没有共同的属性或方法。为了具有通用类型,我求助于使用一个空接口作为返回类型,并在两者上“实现”。 那听起来当然不对。我只能抱有希望,希望有一天这些类将有一些共同点,并将这种共同的逻辑移到我的空接口上,以此来安慰自己。但是我不满意,正在考虑是否应该使用两种不同的方法并有条件地调用next。那会是更好的方法吗? 有人还告诉我.NET Framework使用空接口进行标记。 我的问题是:空接口是设计问题的有力标志还是被广泛使用? 编辑:对于那些感兴趣的人,我后来发现,功能语言中的有区别的联合是我要实现的目标的完美解决方案。C#似乎对该概念并不友好。 编辑:我写了一篇关于这个问题的较长文章,详细解释了这个问题和解决方案。

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.