Grails框架有许多构造/功能,允许在项目中遵守DRY原则(“不要重复自己”)。也就是说:在特定项目中,您很少需要重复相同的设置或代码块。到目前为止一切都很好。
但是,我越来越多地使用Grails,我发现我更多地重复代码不是在同一个项目中而是在项目之间。那就是项目A有控制器,GSP:和与项目B重叠的图像。这是一个维护噩梦,因为项目A中的错误修复也必须在项目B等中修复。
我想通过不在我的项目之间复制代码来将DRY提升到新的水平。
我的问题:您如何在自己的内部Grails项目中解决此问题(违反“项目间干”)?
请非常具体/具体。如果可能的话,尝试在实践中包含具体的代码示例。
答案 0 :(得分:7)
编写自定义插件是最好的方法。您无需将其发布到公共存储库,因为您可以在自己的网络中的某个位置使用私有存储库。
我还没有足够的重复代码来提取插件(在我的项目中重复的大部分代码似乎被各种公共插件覆盖),但插件可以像一些常见的域类一样简单或服务。
答案 1 :(得分:5)
我同意李,使用通用/共享插件可能是最好的方法。在我工作的一个地方,出于这个原因,我们有很多内部插件。
最常见的模式是将您的常用域对象放入自己的插件中。这适用于域类或服务。我们最终没有将控制器,视图和静态资源重构为插件,但应该采用相同的原则。
长话短说:重复使用Grails工件=使用插件。
答案 2 :(得分:0)
为了增加Lee和Colin的观点,这两点都是有效的,我认为从多个插件的角度思考可以产生其他好处。
例如,您可以将应用程序功能分成多个部分,并让不同的人处理它们。或者它可以在部署期间产生结果,例如,如果您需要对应用程序进行两层访问 - 用户级别和管理员 - 如果您的域模型位于单独的插件中,正如Colin建议的那样,您可以轻松构建两个应用程序并单独部署它们。
对于我的应用程序,我有几个特定于我的项目的插件 - 域类插件,一个用于导入数据的一堆代码(我可以轻松地对我的网站运行),一些其他用于图形化和脚手架定制的插件。这需要更多的思考,但我希望这种因素将在未来带来红利,因为我们会为团队带来更多的人。