Language agnostic 从应用程序中提取框架的最佳实践是什么?

Language agnostic 从应用程序中提取框架的最佳实践是什么?,language-agnostic,Language Agnostic,我在一个应用程序上工作了两年多,开发了很多有用的帮助程序、实用程序、功能、设置约定等 我想开始构建一个类似的应用程序,并认为我可以在新应用程序中重用现有应用程序中构建的许多功能 我一直听说从应用程序中提取一个框架是最好的,但没有听说过很多关于它的最佳实践。更好的是,知道对框架的更改可以使我将要构建的所有类似应用程序受益(可能有十几个) 我从哪里开始?有什么最佳实践吗?有什么陷阱或需要注意的地方吗 编辑:我应该澄清一点,我这样做不是为了任何人,而是为了我自己。我正在为不同的行业开发类似的应用程序,

我在一个应用程序上工作了两年多,开发了很多有用的帮助程序、实用程序、功能、设置约定等

我想开始构建一个类似的应用程序,并认为我可以在新应用程序中重用现有应用程序中构建的许多功能

我一直听说从应用程序中提取一个框架是最好的,但没有听说过很多关于它的最佳实践。更好的是,知道对框架的更改可以使我将要构建的所有类似应用程序受益(可能有十几个)

我从哪里开始?有什么最佳实践吗?有什么陷阱或需要注意的地方吗


编辑:我应该澄清一点,我这样做不是为了任何人,而是为了我自己。我正在为不同的行业开发类似的应用程序,所以核心是90%相同的,区别在于细节。

将所有代码放在办公桌旁的一堆中。从空白页开始,编写希望使用所需框架编写的代码。然后使用您现有的组件代码,编写一个框架,让您可以使用所需的代码。

我以前做过这件事,虽然这是一次有趣而有益的经历,但我不得不说我不会再这样做了。以下是我的理由

1) 人们希望你支持这个框架。这是我面临的第一个挑战。有人来找我寻求帮助、问题和错误修复。这真的很难,因为我已经转到其他项目,没有时间支持它们

因此,请确保您为未来制定了明确的支持计划。如何维护应用程序?谁来维护它?维护它需要多少时间?最重要的是。。。谁来支付维护费用

2) 开发人员讨厌被告知要做什么或受到约束。我为VB开发人员编写的简化数据访问层框架。它创建了一组很好的、易于使用的例程,无论MS如何更改DB访问例程,这些例程都能正常工作。某些开发人员不喜欢被告知使用框架,所以他们会抱怨。坦率地说,我听腻了,这对同事造成了一些不好的影响

因此,请确保你有一些厚脸皮,并能向市场宣传人们为什么应该使用你的框架。

请参阅David Heinemeier Hansson对Rails如何形成的看法,从Rails起源于Basecamp中使用的框架开始。鉴于Rails的流行,您可能会从DHH如何实现这一目标中学到一两件事。:-)


(好吧,与其说是“如何”,不如说是“为什么”。但仍然很有趣。:-)

以下是我们Starling软件从为和QWeb做这件事中学到的东西

我们的方法是将其视为一项重构工作,使用框架或原型框架分布在所有项目中。我们将每个项目中的框架代码分离为单独构建的部分,例如,src/myapp包含特定于应用程序的代码,src/qam包含框架本身。每个项目都有自己的特定于应用程序的代码副本,还有一个单独的项目只包含框架本身的最新版本。当我们在某个特定项目中确定某个项目想要加入框架时,我们:

  • 在项目中进行重构以概括代码(基于我们对该应用程序和使用该框架的所有其他应用程序的理解)
  • 在项目中进行重构,将基因化代码从特定于应用程序的部分转移到框架部分
  • 将此更新应用于包含框架“主副本”的项目
  • 将主副本中的更改合并到同样使用该框架的其他项目中;然后
  • 在其他项目中重构,以使用框架的该部分,而不是它们类似的特定于应用程序的代码
  • 这需要相当多的纪律来快速地改变。如果您刚刚完成一项新功能的开发,并立即将其引入到其他项目中,那么集成就很容易了。在一段时间内没有更新的项目在使用最新版本的框架时变得更加难以更新。如果不快速将更改引入主副本,可能会在两个项目中的框架副本中出现不同(更糟糕的是,冲突)的更改,并且合并可能会变得相当痛苦。在开始更改框架之前,您肯定希望将任何特定项目更新为框架的最新版本

    这样做需要一定数量的工具等方面的实际支持。您需要一种在框架的各个副本之间轻松快速地来回移动更改的方法。我们有一个定制的工具来实现这一点(
    qu
    ),但我想人们也可以使用修订控制系统,特别是通过移动补丁来实现的分布式系统来帮助实现这一点

    为每个应用程序提供全面的测试套件有很大帮助;我不确定我是否想在没有这个的情况下尝试这个


    为了保持理智,保持小的变化是很重要的。同样,这完全取决于合并和移动更新有多困难。如果它总是很快,而且是你最近一直在做的事情,事情就会变得容易。更改越大,而且您在框架中工作的时间越长,事情就变得越困难。

    我应该澄清一点,我这样做不是为了任何人,而是为了我自己。我正在为不同的行业开发类似的应用程序,所以核心是90%相同,区别在于细节。