Grails项目之间的代码重用 - 保持干燥

时间:2009-09-03 06:41:53

标签: grails

Grails框架有许多构造/功能,允许在项目中遵守DRY原则(“不要重复自己”)。也就是说:在特定项目中,您很少需要重复相同的设置或代码块。到目前为止一切都很好。

但是,我越来越多地使用Grails,我发现我更多地重复代码不是在同一个项目中而是在项目之间。那就是项目A有控制器,GSP:和与项目B重叠的图像。这是一个维护噩梦,因为项目A中的错误修复也必须在项目B等中修复。

我想通过不在我的项目之间复制代码来将DRY提升到新的水平。

我的问题:您如何在自己的内部Grails项目中解决此问题(违反“项目间干”)?

请非常具体/具体。如果可能的话,尝试在实践中包含具体的代码示例。

3 个答案:

答案 0 :(得分:7)

编写自定义插件是最好的方法。您无需将其发布到公共存储库,因为您可以在自己的网络中的某个位置使用私有存储库。

我还没有足够的重复代码来提取插件(在我的项目中重复的大部分代码似乎被各种公共插件覆盖),但插件可以像一些常见的域类一样简单或服务。

答案 1 :(得分:5)

我同意李,使用通用/共享插件可能是最好的方法。在我工作的一个地方,出于这个原因,我们有很多内部插件。

最常见的模式是将您的常用域对象放入自己的插件中。这适用于域类或服务。我们最终没有将控制器,视图和静态资源重构为插件,但应该采用相同的原则。

长话短说:重复使用Grails工件=使用插件。

答案 2 :(得分:0)

为了增加Lee和Colin的观点,这两点都是有效的,我认为从多个插件的角度思考可以产生其他好处。

例如,您可以将应用程序功能分成多个部分,并让不同的人处理它们。或者它可以在部署期间产生结果,例如,如果您需要对应用程序进行两层访问 - 用户级别和管理员 - 如果您的域模型位于单独的插件中,正如Colin建议的那样,您可以轻松构建两个应用程序并单独部署它们。

对于我的应用程序,我有几个特定于我的项目的插件 - 域类插件,一个用于导入数据的一堆代码(我可以轻松地对我的网站运行),一些其他用于图形化和脚手架定制的插件。这需要更多的思考,但我希望这种因素将在未来带来红利,因为我们会为团队带来更多的人。