java - 如何(或者你应该)避免 jsf 中的长方法/类

标签 java model-view-controller jsf backing-beans

我主要在基于 JSF 的项目中处理遗留代码,并且在支持 bean 中有很多相当长的类和方法。

这一直困扰着我,但是当我寻找可以做的事情时,大多数时候我所能想到的就是将一个长方法分成 n 个小方法。这给你的类(class)仍然很长,有时也更难阅读。

那么如何使支持 bean 简短明了呢?或者你是否为一页保留一个大的支持 bean?有什么最佳做法吗?

我认为这与 jsf 没有直接关系,而是与您使用 Controller “支持” View 的任何模型有关。因此,一般性建议也会有所帮助。

最佳答案

将所有字段放在它自己的类中,也称为实体或 DTO 类(例如 UserProductOrder 等)和而是引用它。这些可以是 JDBC/JPA 实体。将所有业务方法放在它自己的类中,也称为服务或域对象(例如 UserServiceProductService 等)并引用它。这些可以是 EJB。

例如因此不

public class Bean {

    private Long id;
    private String field1;
    private String field2;
    private String field3;
    // Etc... All model fields.

    @PostConstruct
    public void init() {
        // >20 lines of business/domain code to prefill the fields from DB.
    }

    public void save() {
        // >20 lines of business/domain code to save the fields in DB.
    }

    // Getters/setters for all fields and possibly also all nested fields.
}

更是如此

public class Bean {

    private Long id;
    private Entity entity;

    @EJB
    private EntityService service;

    @PostConstruct
    public void init() {
        entity = service.find(id);
    }

    public void save() {
        service.save(entity);
    }

    // Getter/setter for id and getter for entity.
}

此外,我还看到了代码,其中嵌套对象/实体由 bean 中的其他 getter/setter 委托(delegate),就像这样

private Entity entity;

public String getField1() {
    return entity.getField1();
}

public void setField1(String field1) {
    entity.setField1(field1);
}

// Etc...

这完全没有必要。实体只有一个 getter 就足够了(setter 不是强制性的!),结合

<h:inputText value="#{bean.entity.field1}" />

本身的实体也可以进一步划分。例如。 街道houseNumberzipCodecitycountry 用户 可以替换为同一 User 中的另一个实体/DTO Address


如果您运气不好,代码已由可视化编辑器(例如 Netbeans + Woodstock)自动生成。无论如何,如果不完全重新设计,就没有太多要重构的,我宁愿寻找另一个项目。

关于java - 如何(或者你应该)避免 jsf 中的长方法/类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6412547/

相关文章:

java - fragment inflater 中的空指针异常

php - 显示产品信息php

jsf - 在新选项卡中重定向到外部 URL 并同时在支持 bean 中执行操作

java - 基于组件的 MVC 框架中的控制较少意味着什么

wpf - 如何在运行时更改 WPF 窗口内容

java - 如何访问 java bean 的非 getter/setter 方法

java - 有没有办法从 "onResponse"函数接收响应对象?

java - 将字符串附加到数组

java - View 展开动画通过在嵌套布局中使用 "animateLayoutChanges"影响其他 View

asp.net-mvc - 返回部分 View 的 RedirectToAction 如何返回完整 View ?