2011-06-25 48 views
0

如果你有一个库/框架/类实现类似Rake的依赖管理,它似乎对通用编程有用,即将代码分解为任务和依赖关系。有没有'耙样'的设计模式?

例如,想象一下在flickr上管理用户照片库的应用程序。该应用程序可能会被分解为具有相互依赖关系的类似Rake的任务。登录可能是一项任务,同步用户照片可能是另一项依赖于登录任务的任务,删除照片可能是一项依赖于用户数据最新的任务。

这似乎是一个简单/(基本)的概念,可能已经作为一个设计模式存在,或者甚至作为一个图书馆(理想情况下在C或Objective-C),除非它是一个非常糟糕的想法..(请评论) ?

这是否会重新发明一个实现Rake的Objective-c(或您选择的语言)以供在桌面应用程序内部使用,而不是作为构建实用程序?

+1

这非常含糊。 Rake与Rake有什么不同,具体而言,具有哪些相似之处? – jalf

+0

你知道Rake做什么吗?想象一下,不是作为构建工具,而是像桌面应用程序的中心架构,比如说,Photoshop。我的问题仅仅是这已经是一个公认的设计模式?对不起,你觉得它含糊不清。 – hooleyhoop

+0

是的,我知道它做了什么,但我不明白“作为中央架构”的含义。它的角色究竟是什么?你问的基本上是“有没有像橙色的东西,可以在上下班之间运送人们?”是的,那里*可能*是。但是他们是完全不同的东西,对于任何不在你脑海的人来说都是不清楚的。*一个人如何处理另一个人的工作。我可以在这两者之间找出十几个相似之处,但我不知道哪些特定的*你感兴趣。 – jalf

回答

1

如果你正在谈论的是实际的依赖管理,我不会称之为设计模式。

阅读有关如何执行directed acyclic graphtopological sort,依赖关系管理归结为此。

我认为这样的图书馆很有可能存在。

编辑

我刚刚发现this library,它可能证明是有用的。实际上它是一个相当大的图书馆,但它包含一个能够(或者声称可以做)拓扑排序的类。

我应该补充一点,我很确定没有处理这个问题的设计模式。确定应该完成一个给定的相互依赖的任务序列的顺序只是一个图论问题。我链接的维基百科文章几乎包含了你需要知道的一切。

不应该那个类工作,我认为从头开始实现它或从另一种语言翻译(例如Python:我似乎记得Twisted为您提供这样的功能)并不困难。

更编辑

我不认为在实现您的应用程序依赖管理将重塑车轮只是另一种情况。如果你需要它,编码。也就是说,除非您可以找到适合您需要的兼容许可证的通用工作库。在这种情况下,通过一切手段使用它。这真的很简单。

+0

谢谢你的回答@ s.m。我非常想将任务表示为DAG节点,管理它们的执行并跟踪它们的状态。节点将具有与缓存行为,重置条件,异步/同步执行等有关的属性。这几乎是对Rake的一种天真的重新实现 - 这很好(对我来说并不难解决),只要我我不会忽视现有的策略/设计,这种策略/设计是由比我更聪明的人试验和测试的。非常有趣的是Twisted可以做到这一点。 – hooleyhoop

相关问题