Questions tagged «design-patterns»

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

4
CQRS:命令返回值[关闭]
已关闭。这个问题是基于观点的。它当前不接受答案。 想改善这个问题吗?更新问题,以便通过编辑此帖子以事实和引用的形式回答。 2年前关闭。 改善这个问题 关于命令是否应该具有返回值,似乎存在无尽的困惑。我想知道是否只是因为参与者没有说明他们的背景或情况而引起的困惑。 混乱 这是混乱的例子... 乌迪·达汉(Udi Dahan)说,命令“没有将错误返回给客户端”,但在同一篇文章中,他展示了一个图,其中命令的确向客户端返回了错误。 Microsoft Press Store上的一篇文章指出“命令...不返回响应”,但随后给出了模糊的警告: 随着围绕CQRS的战场经验的增长,一些实践逐渐巩固并趋于成为最佳实践。在某种程度上与我们刚才所说的相反...今天普遍认为,命令处理程序和应用程序都需要知道事务操作的进行方式。结果必须是已知的... 吉米·博加德(Jimmy Bogard)说“命令总是有结果”,但随后又花了很多功夫来说明命令如何返回无效。 那么,命令处理程序是否返回值? 答案? 从吉米·博加德(Jimmy Bogard)的“ CQRS神话”中获取线索,我认为该问题的答案取决于您在说什么程序化/上下文“象限”: +-------------+-------------------------+-----------------+ | | Real-time, Synchronous | Queued, Async | +-------------+-------------------------+-----------------+ | Acceptance | Exception/return-value* | <see below> | | Fulfillment | return-value | n/a | +-------------+-------------------------+-----------------+ 验收(例如验证) 命令“接受”主要是指验证。假定验证结果必须同步地提供给调用方,而不管命令“完成”是同步的还是排队的。 但是,似乎许多从业者并不从命令处理程序中启动验证。从我所看到的,这是因为(1)他们已经找到了一种在应用程序层处理验证的绝佳方法(即,通过数据注释检查有效状态的ASP.NET MVC控制器)或(2)一种体系结构假设命令已提交到(进程外)总线或队列中。后一种异步形式通常不提供同步验证语义或接口。 …

3
菱形符号在UML类图中表示什么?
考虑下面的两个图。上面的一个在右端包含一个普通箭头,而下面的一个在左端包含一个菱形箭头,而在右端包含一个普通箭头。本伟大的书GoF的同时具有这两种图表的用法。 我想了解菱形在第二种情况下表示什么,以及这两种情况中的哪一种在Customer和之间具有更强的关联性Order。 在这两种情况下Customer,Order班级是否负责班级的生命周期?

3
事件驱动模型和反应堆模式之间有什么区别?[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 2年前关闭。 已锁定。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 摘自Wikipedia Reactor Pattern文章: 反应堆设计模式是一种事件处理模式,用于处理通过一个或多个输入同时交付给服务处理程序的服务请求。 它命名了几个例子,例如nodejs,twisted,eventmachine 但是我了解到上面是流行的事件驱动框架,因此使它们也成为反应堆模式框架吗? 如何区分这两者?还是一样?

12
作为弱引用的侦听器的优缺点
将侦听器保留为WeakReferences的利弊是什么? 当然,最大的“专业版”是: 将侦听器添加为WeakReference意味着侦听器无需费心“删除”自身。 更新资料 对于那些担心侦听器仅引用对象的人,为什么不能有2个方法addListener()和addWeakRefListener()? 那些不关心删除的人可以使用后者。


15
复合主键与唯一对象ID字段
我继承了一个数据库,该数据库的构想是复合键比使用唯一对象ID字段更理想,并且在构建数据库时,永远不要将单个唯一ID用作主键。因为我正在为此数据库构建一个Rails前端,所以遇到使它符合Rails约定的困难(尽管可以使用自定义视图和一些其他gem来处理复合键)。 编写此特定架构设计背后的原因与编写数据库的方式有关,这与数据库如何以非有效方式处理ID字段以及在构建索引时树型排序有缺陷。这种解释没有任何深度,我仍在尝试围绕这个概念(我熟悉使用复合键,但并非100%的时间)。 任何人都可以对此主题发表意见或增加深度吗?

6
如何组织游戏代码以适合MVC模式?
我是大学一年级的学生,攻读计算机科学学位。最近几年,我编写了很多程序,但是最近,我对结构代码,设计模式,语言差异等方面的理论有了更多的了解。 我有一个Java类,所以我放弃了C ++的研究/开发,而转到了Java和JOGL(Java OpenGL)。太好了!但这不是重点。 我想制作一个小型的角色扮演游戏,但是这个问题确实适用于任何类型的游戏。您如何以结构化的方式组织游戏对象,例如Model-View-Controller模式?它看起来是一种了不起的模式,已经被广泛使用并且很有道理,但是我在弄清楚如何实现它方面遇到了麻烦。 例如,我需要跟踪GL对象以绘制到屏幕上。我必须具有实现MouseListener,MouseMotionListener,MouseWheelListener和KeyListener的类(或一个类,多合一输入管理器)。而且我必须将游戏数据放在所有这些不同类都可以访问和修改的地方。如果有人按下键盘上的按钮,则输入管理类需要以某种方式执行键所映射的操作;当需要绘制框架时,图形类需要找到一种方法来遍历所有不同的“事物”并全部绘制。 而我最大的问题是GUI;它在哪里联系在一起?这有点像输入,但不完全相同,它需要从实际的游戏模拟中设置和获取数据。而且,如果我决定尝试添加网络,则更加复杂的是(类似于GUI) )还需要访问大量数据以进行修改和读取... 哦,我都很困惑。我不知道如何将所有这些以面向对象的方式一起工作……编写清楚适合模式的东西很容易,但是当您发生大量事情时,所有事情都绑在一个游戏循环上,互相修改以及游戏数据等等,……我什至不知道。也许我只是在做比实际更大的交易。 其他人有这种感觉吗?请澄清一下我的处境,这样我就可以花更少的时间去担心和不知道从哪里开始! 编辑:找到了一个不错的图表,可能会帮助我解决所有问题...来源:(请注意,PS文件!)http://www.tucs.fi/publications/attachment.php?fname=TR553.ps.gz Edit2:我也喜欢这个人对他如何计划他的MVC游戏的解释:http : //interactivesection.wordpress.com/2007/11/19/dum-de-dum-drum-my-first-mvc-game-development/ Edit3:另一篇很棒的文章! http://dewitters.koonsolo.com/gamemvc.html

7
Python:使用“ ..%(var)s ..”%locals()是一种好习惯吗?
我发现了这种模式(或反模式),对此我感到非常满意。 我觉得它非常敏捷: def example(): age = ... name = ... print "hello %(name)s you are %(age)s years old" % locals() 有时我用它的表弟: def example2(obj): print "The file at %(path)s has %(length)s bytes" % obj.__dict__ 我不需要创建人为的元组并计算参数并将%s匹配位置保留在元组中。 你喜欢它吗?您会/会使用它吗?是/否,请解释。



6
角度设计模式:MVC,MVVM或MV *?
Angular 1.x(AngularJS)由于具有双向数据绑定功能,因此或多或少遵循MV *设计原理。 Angular2正在采用基于组件的UI,这是React开发人员可能熟悉的概念。从某种意义上说,Angular 1.x控制器和指令会模糊到新的Angular 2组件中。 这意味着在Angular 2中没有控制器,也没有指令。相反,组件具有一个与该组件将代表的html标签相对应的选择器,以及一个@View,用于指定要填充的HTML模板。 Angular2仍然实现双向数据绑定,但是不包含模型,例如,如果我有一个@Component显示文章列表和一个class定义文章对象的模型: class Article { title: string; link: string; votes: number; constructor(title: string, link: string, votes?: number){ this.title = title; this.link = link; this.votes = votes || 0; } 在MVC模式中,这将被视为模型。 因此,考虑到哪种设计模式Angular最接近?

12
观察者模式与事件驱动方法之间的区别
我总是发现观察者模式几乎与通常的事件驱动方法相似。实际上,我几乎相信它们实际上是指同一事物的不同名称。它们都使用相似的概念作为侦听器,甚至在实现中,它们几乎是同一件事,那就是具有回调方法/函数来执行操作。至少在Java中是这样。 用其他语言(如Actionscript / Flex)表示,事件对用户更友好,并且看起来似乎不仅仅是观察者模式定义的事情。但是,这些概念听起来是一样的。 但这是真的吗?观察者模式与通常的事件驱动编程风格一样吗?

8
MVC的替代品[关闭]
已关闭。这个问题需要更加集中。它当前不接受答案。 想改善这个问题吗?更新问题,使其仅通过编辑此帖子来关注一个问题。 4年前关闭。 改善这个问题 什么是模型视图控制器的替代“设计方法”?MVC似乎很流行(SO是用它构建的,我知道很多),但这是唯一使用的方法吗?

6
使用运行时确定的类型实例化对象
我处于一种情况下,我想实例化一个将在运行时确定的类型的对象。我还需要执行对该类型的显式转换。 像这样: static void castTest(myEnum val) { //Call a native function that returns a pointer to a structure IntPtr = someNativeFunction(..params..); //determine the type of the structure based on the enum value Type structType = getTypeFromEnum(val); structType myStruct = (structType)Marshal.PtrToStructure(IntPtr, structType); } 这显然不是有效的代码,但我希望它传达了我正在尝试做的本质。我实际上正在使用的方法将必须在约35种不同类型上执行封送处理操作。我还有其他几种方法需要对同一组类型执行类似的操作。因此,我想将类型确定逻辑与这些方法隔离开,这样我只需要编写一次即可,并使这些方法保持清晰易读。 我必须承认自己是设计的新手。谁能建议一个解决这个问题的好方法?我怀疑可能有一个我不知道的合适的设计模式。


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.