【问题标题】:Am I in tier leakage anti pattern? What should I do?我是否处于防漏层模式?我该怎么办?
【发布时间】:2012-01-15 07:01:06
【问题描述】:

我被要求向现有系统添加一个模块。在研究结构时,我发现了一些“奇怪”的东西。该系统是基于struts1的。

在一些jsp中,我发现有一些DAO调用来返回实体对象。 在大多数 JSP 页面中,都有一个 <app:validate> 标签,它会调用 DAO 来检查访问权限,如果不允许,则会重定向到登录页面。 有一个 accessDA 对象,但它不仅仅做数据获取,它还做一些访问权限检查。

我的问题是:

  1. 在视图中调用 DAO 会导致层级泄漏吗?
  2. 应用标签实现是一种好的做法(还是应该在操作类而不是视图中进行检查)?
  3. accessDA 是不是太胖了?
  4. 我的新模块应该遵循现有结构吗?

【问题讨论】:

    标签: java struts anti-patterns


    【解决方案1】:

    1) IMO 是的,但是:它 不是 本身就是一个泄漏的抽象,正是因为它在标签中。存在标签以从视图中抽象实现细节。也有争议的是,在操作中进行访问查找会使 action 负责仅与视图层相关的事情。

    将数据访问封装在标签本身中的另一个问题是,如果页面上有许多标签的使用,可能会出现不必要的数据访问,从而减慢响应时间。一个聪明的标签可以通过缓存值来缓解这种情况,或者可以在更深的层次上实现缓存。

    2) 像这样的标签应该作用于当前用户对象,它应该已经封装了用户的权限(可能在登录时)。也就是说,如果访问权限在用户会话期间可能发生变化,则使用缓存值来确定访问权限可能是不够的。

    3)我不知道;不知道 IMO 无法回答的更多细节。

    4) 视情况而定。以多种方式做同一件事可能会导致维护噩梦。

    如果努力根据最佳实践重新构建应用程序,那么是的,新的开发应该遵循更好的模式。如果没有,IMO 引入多种方法来做同一件事会更加令人困惑,并且让那些跟随的人更加困难,因为他们需要决定用哪种方法来做某事,确定是否不同方式之间存在功能差异,等等。

    【讨论】:

    • erm,我不打算重新构建应用程序,我最好坚持原来的模式。
    【解决方案2】:

    在典型的 MVC 用法中,应该有一个明确的Separation of Concerns。含义,模型,视图和控制器部分应该解耦。让我来回答你的问题

    1.调用 DAO 是否会导致层级泄漏

    是的。理想情况下,DAO 调用应该在 action/handler 类中。如此获得的数据被放入请求/会话中,以便稍后由视图渲染层获取。

    2.app 标签的实现,是一个好的实践吗?(或者它应该在 action 类而不是在视图中进行检查。)

    不应在每次访问权限检查时调用 DAO。访问权限应在用户登录时缓存,并且应使用以下命令检查后续请求 上述标签。所以在这里,虽然不是直接违规,但不是一个好习惯。

    3.是不是accessDA太胖了?

    是的。看来是这样。

    4.我的新模块应该遵循现有的结构吗?

    在做出上述观察后,我建议不要这样做。

    【讨论】:

      猜你喜欢
      • 2016-11-28
      • 2021-10-01
      • 2022-07-25
      • 2012-05-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-04-08
      • 2013-03-01
      相关资源
      最近更新 更多