构建框架时需要考虑的事项

时间:2009-08-26 07:25:00

标签: java frameworks

我们计划建立一个框架:一个成本估算框架,将在我们组织的各个领域中使用。

高级要求是这样的: 如果我开发某种产品,我会花多少钱?生成的成本将用于与供应商引用的成本进行比较,并决定选择哪个供应商。

现在,我的问题是: 开发框架时需要考虑哪些事项?

我的想法很少:

  1. 通过抽象类和接口实现高级需求
  2. 提供可能对Framework用户有用的实用程序类。
  3. 考虑内部应该是什么 - 一种不应该向框架用户显示的元数据。
  4. 设计模式使用类似模板。
  5. 输入类的属性和方法。

5 个答案:

答案 0 :(得分:13)

一些想法:

  • 稍后添加有用功能比删除已被证明设计糟糕或有害的功能更容易。
  • 继承设计或禁止它:继承引入了额外的复杂层,因为您需要计算超类和子类之间的交互。这并不是说它是邪恶的,但它应该非常仔细考虑。
  • 在我的经验中,接口通常比抽象类更清晰,因为它们促进了构成而不是继承。
  • 对于接口,记录调用者应该期望的内容以及实现者应该期望的内容。基本上从双方想出合同,并记录下来。特别是,文档无效约束 - 方法是否应该接受null?他们应该保证他们永远不会归零吗?
  • 使用框架设计可测试性,包括框架和其他框架。框架的哪些部分可以合理地用在测试代码中,哪些应该被模拟出来?
  • 从一开始就使用您自己的框架。构建一个其他人可以用来理解框架的示例应用程序。

答案 1 :(得分:6)

答案 2 :(得分:3)

以下是我的进展方式:

  1. 做一个广泛的高级设计 - 比如web-app或胖客户端,是否存在中间层,数据库交互将如何发生,将使用哪些API /技术等等。
  2. 选择一项功能,允许您在应用程序的所有层(通常称为尖峰)中执行代码。
  3. 实现最低限度,使该功能与Keep It Simple, Stupid)一起运行,并证明其有效。
  4. 选择另一个功能转到3(根据需要进行重构)。
  5. 我总是发现这种工作方式可以改进系统并且实际上使某些工作重点在于您的设计必不可少(而不是纸张设计可能发生的幻想之旅)。

    而且我认为我的敏捷主义者已经消失了; - )

答案 3 :(得分:2)

除了一般的编程建议外,还值得研究一下软件框架设计理论的一些基础知识。首先要了解“热点”和“冰点”的概念。虽然这可能不会立即显示出来,但在开发过程中掌握在脑海中是件好事。

一如既往,维基百科是一个很好的起点:

http://en.wikipedia.org/wiki/Software_framework

这里也是一个很好的总结:

http://www.acm.org/crossroads/xrds7-4/frameworks.html

如果你想深入了解这些文章中的引文。

答案 4 :(得分:0)

在API合同中使用接口。这使您可以将杂乱的细节完全分离,并在需要时轻松装饰它们。 (只需看看属于伪装映射的地图)。

一个非常好的提示是使用测试驱动设计 - 即编写测试FIRST然后执行。这迫使你像USERS而不是设计师一样思考,最终将导致更好的API。