【问题标题】:Place the business logic in Java Beans?将业务逻辑放在 Java Beans 中?
【发布时间】:2011-01-30 04:26:22
【问题描述】:

我是reading this page,发现以下语句:

Java 服务器页面中的 MVC

现在我们有了一个方便的 分离视图的架构,如何 我们可以利用它吗? Java 服务器 页面(JSP)变得更有趣 因为 HTML 内容可以 脱离Java业务 对象。 JSP也可以利用Java 豆子。 业务逻辑可以放在 Java Beans 中。 如果 设计是正确的架构,一个Web 设计师可以在 JSP站点不干扰 Java 开发人员。

有趣的是,我在教科书中引用了以下引文:

在 MVC 架构中...... 原始请求始终由 一个小服务程序。 servlet 调用业务逻辑和数据访问代码并创建 bean 来表示结果(即模型)。 然后, servlet 决定哪个 Java 服务器页面 适合呈现那些 特定结果并转发 在那里请求(JSP 是视图)。 servlet 决定什么业务 应用逻辑代码和哪个 JSP 应该显示结果( servlet 是控制器)。

这两种说法似乎有些矛盾。使用 bean 的最佳方式是什么:我们应该在其中放置业务逻辑还是应该只在其中放置结果? bean 是否不足以表示模型?

【问题讨论】:

    标签: java model-view-controller jsp servlets


    【解决方案1】:

    将业务逻辑放在后缀为 Manager 的类中也很常见。尽管有些人将业务逻辑放在数据对象 bean 本身上,但我发现数据对象上的方法只执行不依赖任何外部依赖项的简单功能时最好。我将所有其余的业务逻辑放在一个 Manager bean 中,该 bean 能够使用多个数据对象 javabean 和其他外部依赖项来遵循业务逻辑。因此,例如,AccountBean 将包含帐户字段,并且可能包含一些使用这些字段来计算和返回值或格式化字段的简单方法。所有业务逻辑都在 Manager 中,可能是 AccountManagerBean。

    【讨论】:

    • 你的 JSP 是使用 Manager bean 还是只使用模型 bean?
    • 您的视图希望在 JSP 后面有一些东西,在 Struts 中它是和 Action 类,在某些地方它是一个 servlet 类,其他框架使用其他东西。在那个 Java 类中,您可以使用 Manager 来查找、更新、添加、删除传递您的数据 bean。在 JSP 中,最好将尽可能多的 Java 排除在外,因此我只会在其中使用视图数据 javabean 并将 Manager 排除在外。
    • 我发现这一切自相矛盾。因为我觉得在大多数关于 JavaBeans 的文章中,它们似乎都把重点放在它们是简单的数据容器上,几乎只应该只有 getter 和 setter,这与我对 buissinessobject 外观的看法不符。我完全尊重你的回答!只是想就您对 JavaBeans 对 getter 和 setter 的那些“限制”的想法提出一些意见,然后添加其他方法来添加逻辑。也许我误解了整个 JavaBeans 的东西?我真的不知道。 :-o
    【解决方案2】:

    第二个语句基本上是在讲述两个 javabean:一个用于业务逻辑,另一个用于模型。所以,是的,业务逻辑仍然可以放在 javabean 中。业务逻辑的javabean可以将model的javabean封装为它的属性。

    public class User {
        private Long id;
        private String name;
        // ...
    }
    
    public class UserManager {
        private User user;
        // ...
    
        public void login() {
            // ...
        }
    
        public void logout() {
            // ...
        }
    }
    

    【讨论】:

    • 你知道bean可能不适合展示模型的任何情况吗?我没有遇到足够多的情况来提供一个很好的例子,但是不适合 bean 的模型的例子是什么?
    • 另外:JSP中使用的业务bean是否像使用模型bean一样?
    • 我没有看到 bean 可能不适合表示模型的情况。是的,您可以以同样的方式在 JSP 中使用它;访问属性。控制器将根据请求调用这些操作。
    猜你喜欢
    • 2013-11-29
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 2011-08-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-02-16
    相关资源
    最近更新 更多