Api Eclipse中的IProject.setDescription使用什么设计模式
我在设计一个API时考虑了一个特定的模式,但不知道这个模式是否有名称。它类似于GoF(四人帮)中的命令模式,但并不完全相同 我可以在Eclipse中找到一个简单的例子,在Eclipse中,您操作一个项目(Api Eclipse中的IProject.setDescription使用什么设计模式,api,design-patterns,Api,Design Patterns,我在设计一个API时考虑了一个特定的模式,但不知道这个模式是否有名称。它类似于GoF(四人帮)中的命令模式,但并不完全相同 我可以在Eclipse中找到一个简单的例子,在Eclipse中,您操作一个项目(IProject),不是通过调用项目上更改其状态的方法,而是通过以下三步过程: 使用getDescription将其状态提取到描述符对象(IProjectDescription)中 在描述符上设置属性。例如,setName 使用setDescription 一般原则似乎是,您将一个复杂对象作为具
IProject
),不是通过调用项目上更改其状态的方法,而是通过以下三步过程:
getDescription
将其状态提取到描述符对象(IProjectDescription
)中setName
setDescription
set…
调用一次性完成所有更改,您可以在任何一个属性更改失败时有效地“回滚”整个修改。虽然这是这种方法的一个优点,但它并不是它的主要目的。更重要的是,不使用这种方法,只需向API添加事务方法(如commit
和rollback
),就可以实现事务性
我确实想利用这个模式中的两个优点——尽管我不认为上面的eclipse示例会利用它们:
无论如何,我在任何地方都找不到该模式的名称或示例,无论是在Martin Fowler中,还是在Martin Fowler的中都找不到。并非每个设计都记录为单个设计模式,事实上大多数系统设计都是多个模式的组合 然而,在IProjectDescription中,您所做的一部分是使用,然而您的似乎是一个多态变体。考虑模式,因为它们出现在模式目录中,是削减到必要的起点,而不是最终结果。模式本质上是应该扩展和组合的 可以为您提供提交和回滚(Do/Undo)功能,并以这种方式将其与Memento相结合是一种非常常见的方法。在JavaServletAPI中可以看到与HttpRequest和HttpResponse相同的东西。(DTO),Martin Fowler在他的书中描述的似乎就是为了实现第2点中描述的目的 DTO是对它所表示的更复杂的域模型的相当简单的提取 Fowler描述了将DTO与汇编程序结合使用可以使DTO独立于它应该表示的实际域对象。汇编程序知道如何从域对象创建DTO,反之亦然。他还提到,DTO需要可序列化以保持/传输其状态。您在第2点中描述的内容似乎与此描述相符 您在第1点中描述的内容似乎不是预期目的,但使用此模式显然是可以实现的 我不确定你是看了他的书的模式目录还是书本身。这本书本身对此进行了更详细的描述
你可能还想看看甲骨文的定义,福勒说这就是他所说的DTO。Hmm,我知道你从哪里来,但这不是那种模式。调用方从API(“发起者”)获取一个对象并稍后将其发送回,这与此相似,但仅此而已。交易破坏者是“memento对象本身是一个不透明的对象(管理员不能或不应该改变)”,而在我的模式中,获取对象的全部目的是修改它,然后使用它来更新“发起者”,就像你所说的,它不完全适合#1,但会对它起作用。基本上,DTOs特性适合我的用例,但其目的是通过一根线传输状态,而不是封装更改的用例。但这仍然是9个月后最合适的答案,因此获得了奖项。