2017-12-18 1 views
1

내 수업에서 나는 movimentation의 상태를 확인하고 저장해야합니다. 나는이 검증을 어디에 넣을 지 모른다. 모델 레이어에 넣고 콩에 넣지 않는 것이 좋습니다.모델 계층의 비즈니스 규칙

나는이 일을 해요 :

1 - Movimentacao

@SuppressWarnings("serial") 
@Entity 
public class Movimentacao implements Serializable, Entidade { 

    ... 

    @Column(nullable=false) 
    @NotNull 
    @DecimalMin("0.01") 
    private BigDecimal valor; 

    @Column(nullable=false) 
    @NotNull 
    @DecimalMin("0.01") 
    private BigDecimal valorQuitado;  

    @Enumerated(EnumType.STRING) 
    @Column(nullable=false, length=1) 
    private MovimentacaoStatus status; 

    ... 

    public void setStatus(MovimentacaoStatus status) { 
     this.status = status; 
    } 

} 

2 - form.xhtml

<!-- show only on edit mode (status not null) --> 
<h:outputText id="status" value="#{movimentacaoBean.movimentacao.status.descricao}" rendered="#{movimentacaoBean.movimentacao.status ne null}" /> 

3 - MovimentacaoBean

public String salvar() throws Exception{ 

    movimentacaoService.salvar(movimentacao); 
    this.movimentacao = null; 
    this.todos = null; 

    context.addMessage(null, new FacesMessage("Movimentação salva com sucesso", "")); 
    context.getExternalContext().getFlash().setKeepMessages(true); 

    return "pretty:financeiro-lista"; 

} 

에게 사용자가 상태를 정의하지 않았습니다. 어디에서 유효성 검사를해야합니까? setStatus? 내가 (예를 들어)에 대해 setStatus을 변경하는 경우

는 :

public void setStatus() { 
//example. The real Business rules are other. 
this.status = MovimentacaoStatus.P; 
} 

또는

public void setStatus(MovimentacaoStatus status) { //status variable never used... 
//example. The real Business rules are other. 
this.status = MovimentacaoStatus.P; 
} 

나는 아래 오류가 나타납니다 (MovimentacaoBean는 form.xhtml에서 상태받지 않기 때문에) :

발생 원인 : java.sql.SQLIntegrityConstraintViolationException : 열 'status'는 null 일 수 없습니다.

상태에 대한 비즈니스 규칙을 어떻게 그리고 어디에 넣어야합니까? 기록을 편집 할 때도 동일한 질문이 적용됩니다. "valor"및 "valorQuitado"에 따라 상태가 변경 될 수 있습니다. 편집 모드의 차이점은 form.xhtml에서 상태 속성을 볼 수 있다는 것입니다 (읽기 전용 - outputText)

+0

당신은 당신의 빈에서 검증을 넣어해야합니다. Movimentacao에 저장하기 전에. 필드에서 필수 항목을 만들 수도 있습니다 (열거 형에서는 selectOneMenu가 최선의 선택입니다). – Milkmaid

+0

@Milkmaid 어쩌면 MovimentacaoService에 더 좋을까요? 왜냐하면 JSF와 같은 다른 기술에 동일한 클래스를 사용해야 할 경우 커플 링이 필요하지 않기 때문입니다. –

답변

0

에 달려 있습니다. 나는 보통 콩에 넣는다. 그러나 예외를 사용하여 서비스 계층을 검사하는 것도 의미가 있습니다. (다른 프론트 엔드 등을 계획하는 경우) 많은 단점이 있으며 최종 사용자에게 적절한 정보를 제공하려는 경우 조금 더 까다로울 수 있습니다.

따라서 : 두 곳에서 확인하는 것이 좋습니다.

  • 빈은 모든 입력을 최종 사용자에게 적절한 정보로 유효성을 검사합니다.

  • 서비스에서 일반적 예외를 발생시키고 빈으로 잡습니다.

기본 규칙 :

  • 당신이 서비스에 콩 물건을 사용하지 않는 있는지 확인합니다 (같은 상황에 직면, 또는 콩 등 자체).

  • 데이터베이스 상승 예외가 있는지 확인하십시오.(런타임)뿐만 아니라이

점검 : link

관련 문제