【问题标题】:Refactoring: Cross Cutting Concerns workaround重构:横切关注点解决方法
【发布时间】:2009-12-05 15:18:27
【问题描述】:

是否有一种解决方法可以在不涉及方面和切点等的情况下实现横切关注点?

我们在 Spring MVC 中,并且正在开发一个业务应用程序,由于各种原因,进入 AspectJ 或 Spring 的方面处理是不可行的。

我们的一些控制器已经变得非常臃肿(太重了),到处都是大量失焦的代码。

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

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

现在,当我尝试将列表 INLINE 添加到 mav 的所有位置时,这很糟糕。相反,我准备了一个函数来处理每个 ModelAndView。如何?好吧,对函数有更多的垃圾调用!

我用一个麻烦换另一个麻烦。

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

欢迎提出建议。没有 AspectJ 或 Spring 原生的横切关注风味。

【问题讨论】:

  • AOP 是为横切关注点而开发的,因为 OOP 本身并不适合这一点。

标签: cross-cutting-concerns


【解决方案1】:

由于您使用的是 Java,您可以考虑将您的代码迁移到 Scala,因为它与 Java 交互良好,那么您可以使用特征来获得您想要的功能。

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-12-15
    • 2014-07-05
    • 2015-05-31
    • 2011-08-01
    • 2020-02-19
    相关资源
    最近更新 更多