2010-09-21 45 views
1

我的工作有以下用例扑克分析工具:设计围绕一个第三方库我的域模型

  1. 用户创建策略类的一种方法:输入游戏状态,输出PokerAction
  2. 用户运行分析脚本以启动各种策略亚类之间的PokerGame(即各种策略)
  3. PokerGame生成随机甲板
  4. PokerGame发送游戏状态到策略
  5. 斯特拉特埃及将PokerAction到PokerGame
  6. PokerGame更新游戏状态
  7. 当游戏完成(由PokerGame管理),发送GameResult来分析脚本
  8. 用户评论分析脚本的输出

有一个第三方图书馆,执行所有的PokerGame功能。它与我在某些领域对域的建模(例如卡片值等)完全不匹配,但执行我所需的大部分“难以编码”功能(即非重要的步骤4 - 7)。

一般设计问题 当面对这样的库(省去了大量硬编码的,但可能会限制在相关项目未来的设计选择),你倾向于你的项目的其余部分模具库?您是否重构了关键库以符合您的域模型?或者是别的什么?

感谢,

迈克

回答

2

如果我真的觉得我的域模型更适合我前进,我会尝试创建一个抽象层,第三方库和我自己的模型之间进行映射。这将使我能够利用图书馆的优势,同时为我提供灵活性,可以在将来用另一个第三方图书馆或我创建的图书馆替换它。

看一看design patterns这个清单,尤其是Adapter Pattern

+0

谢谢。我在Facade上选择了Adapter,因为我不确定我有一个“更简单”的界面是多么重要。 – MikeRand 2010-09-22 15:14:10

1

我不会将我的项目紧紧地绑定到库上,而是尝试抽象功能并将两者之间的一个或多个对象耦合起来。调解员和/或门面模式在我心中。