重构:跨领域关注的解决方案

时间:2009-12-05 15:18:28

标签: cross-cutting-concerns

是否存在实施跨领域关注点的解决方法,而不涉及方面和切入点等?

我们正在使用Spring MVC,并且正在开发一个业务应用程序,因为各种原因无法进入AspectJ或Spring的方面处理。

我们的一些控制器已经变得非常臃肿(太多),大量的失焦代码随处可见。

每当我坐下来重构时,我都会看到同样的事情一遍又一遍地完成。请允许我解释一下:

每次我必须准备一个视图时,我会为UI添加一个国家/地区列表。 (对象添加到ModelAndView中)。该列表从数据库中删除到ehCache中。

现在,当我尝试将列表INLINE添加到mav的所有地方时,最初是非常糟糕的。相反,我准备了一个处理每个ModelAndView的函数。怎么样?好吧,对函数进行更多垃圾调用!

我为另一个买了一个麻烦。

什么是设计模式/技巧可以帮助我一点点?我厌倦了调用函数来向我的ModelAndView添加东西,并且只有超过3500行的控制器代码,我疯狂地找到所有缺点的东西!

欢迎提出建议。交叉切割涉及没有AspectJ或Spring原生的味道。

1 个答案:

答案 0 :(得分:1)

由于您使用的是Java,因此您可以考虑将代码移至Scala,因为它与Java交互良好,然后您可以使用特征来获得所需的功能。

不幸的是,交叉是OOP的一个问题,所以改为函数式编程可能是一个解决方案,但是,我希望实际上他们使用AOP来实现这些mixin,所以它仍然是AOP,只是抽象出来。

另一个选择是重新设计您的应用程序,并确保您没有重复的代码,但是重大的重构非常困难且充满风险。

但是,例如,您最终可能会使用ModelAndView调用几个静态实用程序类来获取所需的数据,或者确保用户具有正确的角色,例如。

您可能需要查看一本书,重构为模式(http://www.industriallogic.com/xp/refactoring/)以获取一些想法。

相关问题