많은 등록 필드가있는 등록 화면이 있으며 사용자가 등록 버튼을 클릭하면 발표자에게 필드 값을 전달합니다. 발표자에서이 값의 유효성을 검사하고 객체를 만듭니다. 문제는 register() 메소드에서 많은 수의 인수입니다. 나는이 상황을 피해야한다고 생각하지만, 어떻게해야할지 모른다.MVP 방식을 사용하는 메소드에서 많은 수의 인수 전달을 피하는 방법
0
A
답변
0
아마도 Builder pattern을 탐색 할 수 있습니다. 많은 수의 인수를 전달해야 할 때 코드를 깨끗하게 유지할 수 있습니다. 일부 인수는 필수가 아니기 때문에 인수의 정확한 개수를 알지 못할 때도 매우 유용합니다.
myEditText.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
@Override
public void afterTextChanged(Editable s) {
presenter.myEditTextChanged(s.toString());
}
});
가 그런 다음이 : 실제로
, 당신은 내가 이전에이 작업을 수행 한
MyObject myObject
void register() {
myObject = MyObject.Builder(<mandatory arguments>)
.argument1(<argument 1>)
.argument2(<argument 2>)
...
.create();
if (myObject == null) fail();
else dosomething();
}
0
한 가지 방법 같은 것을했을 것이 완료되어야한다 각 필드에 TextWatcher를 사용하는 것입니다 발표자의 해당 메소드는 엔티티를 업데이트합니다. 사용자가 마침내 모든 세부 정보를 등록 할 때이 방법은 이미 발표자를 기다리고있을 것입니다.
또한 사용자가 진행됨에 따라 유효성 검사를 할 수 있다는 이점이 있습니다. 즉, 모든 필드가 유효해야 등록 버튼을 사용할 수 있습니다.
ButterKnife, RxBinding 또는 DataBinding을 사용하는 경우 코드가 더 간결합니다.
개체를 만들지 않고 인수를 발표자에게 전달할 때의 주된 문제. 뷰에서 모델 객체를 만들고 발표자에게 전달할 수 있지만 MVP에 따르면 모든 논리 (즉, 유효성 검사 및 객체 생성)를 표현 자 레이어로 이동해야합니다 –
아마도 MVP 전문가는 아니지만, 사용자에게 어떤 데이터를 요청하는 뷰를 가지고 있다면 반드시 이러한 정보를 표현 자에게 보내야하지만 개체 자체 일 필요는 없습니다. 내가 틀릴 수도 있지만 뷰에서 빌더 패턴을 사용하여 객체를 만들면 유효성 검사와 논리가 create() 내부에서 만들어 지므로 뷰에 어떤 로직도 인식되지 않으므로 생성 된 객체가 있는지 확인해야합니다. null인지의 여부. 그래도 create() 메서드가 발표자 또는 모델의 일부인지는 알 수 없습니다. –
보기에서 로컬 엔터티를 만들면 편집 뷰없이이 엔터티 개체를 다른 개체로 바꿀 수 없습니다. 보기 엔티티 개체, 비즈니스 로직 등을 알지 않아야합니다. 그리고 엔티티 개체 모델 안에는 어떤 로직도 있어서는 안된다고 생각합니다. –