2012-02-11 2 views
1

사용자 인터페이스에서 사용자 도메인 개체를 직접 사용해야하는지 잘 모르겠습니다. 예를 들어, 사용자 ID, 이름, 암호 및 역할 목록이있는 도메인 사용자 사용자에 대한 사용자 인터페이스를 설계하고자합니다. 엔티티은 (예를 들어 잘못된 암호 또는 빈 userId를) 유효하지 않은 상태에서도메인 모델 및 사용자 인터페이스

public class User { 
    public User(String userId, String name, String password) { 
     //Initialization and validation 
    } 

    public String getUserId { 
     /*implementation*/ 
    } 
    public void changePassword(String oldPassword, String newPassword) { 
     /*Set new password if it complies with the rules 
     and if the the old one is correct*/ 
    } 

    public void setName(String Name) { 
     /*implementation*/ 
    } 
    public String getName() { 
     /*implementation*/ 
    } 

    public List<Role> getRoles() { 
     /*implementation*/ 
    } 

    public void addRole(Role role) { 
     /*implementation*/ 
    } 
} 

사용자 인터페이스를 디자인하는 가장 적절한 방법은 무엇입니까 결코 수있는 방식으로 설계되었습니다?

1) 도메인 모델에 충실하십시오 : 디자인 3 windows. "새 사용자"창은 주어진 사용자 ID, 이름 및 암호로 새 사용자를 만듭니다. 암호를 변경하기위한 다른 암호 "Change password"와 기존 사용자의 이름과 역할을 수정할 수있는 "Modify user"

2) 사용자를 생성 할 때 하나의 창만 사용하는 것이 바람직 할 수 있습니다. 주어진 userId, 이름, 암호 및 역할 목록. userId를 아직 입력하지 않은 경우에도 역할을 추가 할 수 있어야합니다.

사용자 인터페이스에서 도메인 개체를 직접 사용할 수 있으므로 옵션 1을 구현하는 것이 가장 쉽습니다. 그러나 사용자 인터페이스는 사용하기에 고통 스러울 수 있습니다. 옵션 2는 바람직하지만 도메인 객체는 직접 사용할 수 없습니다. 사용자가 아직 생성되지 않은 경우 역할을 추가하는 방법을 알 수 없습니다. 나는 그 순간에 올바른 정보가 없을 수도 있기 때문에 사용자를 생성 할 수 없습니다. 예를 들어 userId를 나타내는 임시 빈 텍스트 상자가 있습니다. 이것을 어떻게 할 수 있습니까?

내가 생각할 수있는 유일한 유일한 해결책은 실제 도메인 개체의 정보를 모방 한 사용자 인터페이스에서 사용할 클래스를 만드는 것입니다. 따라서 빈 사용자를 만들어 역할을 추가 한 다음 그 후에 userId를 설정할 수 있습니다. 사용자 인터페이스는이 정보를 사용하여 실제 도메인 객체를 생성 할 수 있습니다.

쉬운 방법이 있습니까? 이 방법은 일반적으로 어떻게 관리됩니까?

답변

1

많은 질문이 있지만 레이어간에 개체를 전달하는 방법을 살펴볼 때 중요한 요소이므로 질문하는 것이 좋습니다.

과 함께 시작하자 "어떻게 이런 일이 일반적으로 관리?"

도메인 개체를 사용자에게 표시하려는 방식이 항상 원시 형식이 아니라는 것을 지적했습니다. 예를 들어, 사용자 예제 에서처럼 역할 추가는 사용자 작성/수정과는 다른 UI에서 수행 할 수 있습니다. 때로는 두 가지 객체를 나란히 표시하거나 예를 들어 두 객체의 혼합 된 데이터를 표시하려는 경우가 있습니다.

방법으로는 약간의 정밀도가 있습니다. 옵션 1 (여러 개의 창)을 도메인 모델에 더 많이 집착시키는 것으로 간주하지만 모델을 덜 모방하는 경향이있는 반면 전체 도메인 개체를 단일 화면 -하지만 그게 세부 사항입니다.

그래서 대개 어떻게 대처합니까?그럼 당신은 귀하의 의견

내가 에 실제 도메인의 정보를 모방하는 사용자 인터페이스를 사용하는 클래스를 만드는 생각할 수있는 유일한 클린 솔루션을 맞춤형 UI 고유의 객체를 생성에 의하여 - 그것을 말했다 정확하게로 개체. 따라서 빈 사용자를 만들어 역할을 추가 한 다음 뒤에 userId를 설정할 수 있습니다.

은 종종 등

사용자 인터페이스는 실제 도메인을 오브제를 만들기 위해 그 정보를 사용할 수 있으며, .NET/MVVM 세계에서 DTO로 's의 뷰 모델 객체라고합니다.

일반적으로 UI 개체에서 도메인 개체를 만들거나 업데이트하는 것은 UI 자체의 책임이 아닙니다. 매핑은 다른 레이어에서 수행됩니다. 이제 우리는 염기성 용액을 본 적이 있다고

,의 그것 가 비정상적으로 관리의 방법을 볼 수 있습니다)

몇 가지 대안이있다. 그 중 하나는 Naked Objects 패턴이며 모든 사용자 인터페이스는 도메인 객체의 직접적인 표현입니다. 이렇게하면 문제가 훨씬 간단 해지지 만 워크 플로우와 사용 편의성 측면에서 항상 그러한 UI가 가장 적합한 지 여부는 계속됩니다.

또는, 당신은 단지 프리젠 테이션 레이어에 도메인 객체를 사용하여 멀리 얻을 수 있습니다. 이 recent post은 동일한 개체를 여러 번 표현한 경우 발생하는 문제를 지적하고 모든 레이어에서 동일한 도메인 개체를 사용할 가능성을 검토합니다. 여기서 문제는 순전히 도메인 관련이없는 그 도메인 객체로 일부 데이터를 강제 할 수 있습니다, 당신은뿐만 아니라 불변의 일부를 포기 (예 "로 사용자가 최소한의 역할은 첨부없이 존재할 수있을 수 있다는 것입니다 ", 사용자 작성 및 역할 할당 사용자 인터페이스를 구분할 경우).

마지막으로 사용자/역할 예제로 돌아가서 "사용자가 아직 생성되지 않은 경우 역할을 추가하는 방법을 알지 못합니다.": 최종 사용자를 위해 기존 사용자 개체가있을 필요는 없습니다 역할을 선택할 수있게 해줍니다. 사용자 객체의 실제 인스턴스가 완료 될 때까지 화면에서 선택된 역할을 선택하고 ID와 같은 필수 필드를 모두 시행 할 수 있습니다.

0

옵션 2의 문제점은 무엇입니까? 먼저 새 사용자 객체를 만든 다음 규칙을 추가 할 수 있습니다. 새 사용자 객체 (예 : 빈 사용자 ID 텍스트 상자)를 만드는 데 필요한 정보가 모두없는 경우 사용자에게이 입력란을 작성해야한다는 알림 만 전달하면됩니다.