Questions tagged «design-patterns»

设计模式是解决软件设计中常见问题的通用可重用解决方案。

3
了解“现实世界”中的松散/紧密耦合
我不会说什么“社区”,因为我想要一个不偏不倚的解释,但是假设您正在构建一个可重用的模块,并且该模块需要3个以上的依赖模块,而删除其中的1个模块不仅会在您的应用中导致中断错误使用该模块的整体,但使用模块本身。 根据我的理解(必须是错误的),一个松耦合的模块化系统不会因为简单地删除一个模块而破裂。该应用程序仍应运行,但没有该“功能” /模块,并且该模块本身不应仅由于不存在依赖模块而导致所有内容无法运行。 这是错的吗?如果是这样,如果模块仍然依赖于一切都不起作用的点,那么紧密/松散耦合之间的区别是什么?

3
不可变的结构和深层次的层次结构
我正在开发一个GUI应用程序,该应用程序大量处理图形-为了示例起见,您可以将其视为矢量编辑器。使所有数据结构保持不变是非常诱人的-因此我几乎可以不费吹灰之力就可以撤消/重做,复制/粘贴以及许多其他操作。 为了简单起见,我将使用以下示例-应用程序用于编辑多边形,因此我有“多边形”对象,该对象只是不可变点的列表: Scene -> Polygon -> Point 因此,我的程序中只有一个可变变量-一个保存当前Scene对象的变量。我尝试实现点拖动时就遇到了问题-在可变版本中,我只是抓住一个Point对象并开始修改其坐标。在不可变版本中-我被卡住了。我可以将的索引存储Polygon在current中Scene,将拖动点的索引存储在中Polygon,然后每次替换它。但是这种方法无法扩展-当成分级别达到5时,样板将变得难以忍受。 我确信这个问题可以解决-毕竟,Haskell具有完全不变的结构和IO monad。但是我找不到方法。 你能给我一个提示吗?

2
通过HTTP和TCP / IP的观察者模式(服务器-客户端)
我有一台服务器和许多客户端(大约50个客户端),它们基于Web应用程序连接到该服务器,该Web应用程序当然基于HTTP协议,而HTTP协议又使用TCP / IP(如果我输入错了,请纠正我,原因是我并不是很擅长联网)。 问题是,我应该开发一种警报机制,其中,当有人提交带有危险值的表单时,经理(也通过同一Web应用程序连接的经理)应该在他的屏幕上收到警报弹出窗口,几乎是真实的时间(即时)。 但是,由于HTTP协议是无状态的,所以我有点不解。我不知道该如何实施。 解决方案之一可能是将JavaScript与setInterval()函数一起使用,以每秒从服务器提取数据。但这对我来说有点脏,而且不专业。 你们有实现另一种解决方案的想法吗?

4
您的应用程序中可以有很多Abstract类吗?
我们最初想通过在公共接口中使用不同方法的实现来实现策略模式。这些将在运行时根据用户输入获取。 事实证明,我们有实现3-5种通用方法的Abstract类,而只剩下一种方法可以用于不同的实现,即Strategy。 更新:对于许多抽象类,我的意思是有6种不同的高级功能,即6个包,每个都有其接口+ AbstractImpl +(实际Impl系列)。 这是一个不好的设计吗? 在以后的可扩展性方面有任何负面意见-我正准备与老年人进行代码/设计审查。

1
.NET应用程序的权限/正确的模型/模式
我需要实现灵活和简单(如果存在这种情况),并在可能的情况下同时利用内置方法 到目前为止,我已经实现了MembershipProvider和RoleProviders。这很酷,但是我下一步要去哪里? 我觉得我需要添加术语“特权”,而不是对应用程序内部的代码进行硬编码。用户将配置角色以将特权添加到角色,并将角色分配给用户。 听起来不错吗?除了将其添加到角色之外,我是否应该考虑在用户级别添加特权?我可能会,但我预想安装(混乱)和支持以下方面的问题。 如果我不这样做,则某些特定用户将需要较少的权限-管理员将不得不创建另一个角色,依此类推。 这样的系统有什么灵丹妙药吗?以及为什么Microsoft不只是会员资格和角色提供者而走得更远? 另一个想法:将角色保留为“特权”持有者并对其进行硬编码。然后,我可以使用所有可用的标记/属性等对应用程序内的那些角色进行编码-所有Microsoft。 添加新实体“组”并创建关系 用户数 用户组 团体 角色组 的角色 这样,我可以将角色收集到组中并将这些组分配给用户。听起来不错,并且与其他软件模式匹配。但是然后我真的不能在RoleProvider中实现诸如以下的功能: AddUsersToRoles RemoveUsersFromRoles 而且有些事情真的不再有意义了,因为它们将被硬编码 DeleteRole 创建角色

1
当前证据是否支持采用规范数据模型中的上下文?
“规范”思想在软件中无处不在。诸如Canonical Model,Canonical Schema,Canonical Data Model等模式似乎在开发中一次又一次出现。 像许多开发人员一样,我经常不加批判地遵循传统的常识,即需要规范的模型,否则您将面对映射器和翻译器的组合爆炸。或者至少,我用来做,直到几年前,当我第一次读到了几分臭名昭著的不信任投票EF: 曾经支持追求规范数据模型的假设既没有也不可能包含一旦将想法付诸实践就会发现的因素。通过多年的反复试验,我们发现针对每个单独的上下文使用单独的模型(可能在其中使用规范的数据模型)是最简单的方法,也是成本最低的方法,并且可以带来更大的可维护性和可扩展性使用上下文模型的应用程序和端点,并且这种方法不会像规范模型那样鼓励软件熵。 这篇文章没有提供任何证据来支持其主张,但是确实让我质疑CDM方法足够长的时间以尝试替代方法,并且所产生的软件在字面上或形象上都没有爆炸。但这并不意味着要孤立很多。我本来可以很幸运。 因此,我想知道,是否对软件系统或体系结构中的规范模型与上下文模型的实际,长期影响进行了认真的研究? 或者,如果现在提出这个要求还为时过早,那么有没有任何开发人员/架构师撰写过有关从CDM切换到独立上下文模型(反之亦然)的个人经验的书,以及对生产率,复杂性或可靠性等方面的实际影响是什么? 那么在不同级别上的差异又如何呢?也就是说,在单个应用程序中使用同一模型与在应用程序系统或整个企业中使用模型之间的差异呢? (请只提供事实;欢迎战争故事,但不能no测。)

6
发表关于“代码样式和设计模式”的演讲[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 5年前关闭。 我的公司(规模不大,在3个办公室中大约有40个人)偶尔会在网上进行“开发者研讨会”,其中一位开发人员主持了有关某个技术主题的演示。这不一定与我们的工作有关,而只是为了帮助每个人提高技能和理解。 我被要求主持下一个,主题(从我提供的列表中选择)是代码样式和设计模式。我知道那些事情并没有那么紧密,但我可以接受。我已经看到我们代码库中有很多地方可以改进,甚至可以满足DailyWTF的要求,因此我希望本演示文稿尽可能有效。问题在于我只是不知道一小时内要覆盖的内容。 我的第一个想法是使用我们自己的代码作为示例,以阐明“请实际将此应用于您的工作”这一观点。但是话题如此广泛。 我们的代码(PHP)有一些问题,包括: 最小OO。最近,它一直在改进,但是仍有大量的全局功能。我花了一段时间才找到东西。 全局配置(我猜是意见)。您几乎可以在每个文件中找到$ GLOBALS ['blah']。 大括号样式不一致。听起来很小,但这实际上导致语法错误在五天前被推送到源头,直到昨天仍未得到纠正。 低效的构造。我能够进行一些基本的改进,从而将某些区域的运行时间减少了70%。 我希望这件事尽可能有用,但不要屈服于我的同事。那么,我应该关注“样式”的哪些方面,哪种设计模式可能最有用的解释?

3
Java Swing应用程序中的窗口管理设计模式
我刚刚开始创建我的第一个小型Java Swing应用程序。程序打开时,将弹出一个简单的窗口,其中包含标签和几个按钮。单击这些按钮之一应该可以擦除欢迎屏幕,并用完全不同的面板替换它。 我不确定创建该功能的最佳方法是什么。一种方法是将我JFrame作为参数传递给...几乎所有其他组件,但这对我来说很棘手。或者,使每个面板都兼作动作侦听器,但这似乎也不对。 我应该在这里应用一种设计模式吗?“替换主窗口(仅主窗口)的内容”必须是一个合理的常见操作。为模式命名就足够了;我可以从那里独自使用Google。(不过,我不会拒绝更长的解释。)
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.