2014-05-08 2 views
1

45 가지 유형의 사용자가 있으며 각 사용자마다 사용할 수있는 기능 집합이있는 애플리케이션이 있습니다. 우리는 enum을 사용하여 모든 사용자 집합을 식별하고 각 기능을 클라이언트 측에서 하드 코딩하므로 변경하기가 매우 어렵습니다.다른 기능을 가진 사용자마다 다중 사용자 유형 추가

 
e.g : 

USER_KABO, 
USER HAEB, 
USER_IOQW ... 

//Method getFunctionality is hardcoded for every user. 
-(ArrayList)getFunctionality:(UserType)type{ 

    switch(type): 
     case : USER_KABO: 
      al = new ArrayList(); 
      al.add(new Functionality()); 


     case : USER HAEB; 
.... 


} 

사용자가 기능을 가지고 있는지 여부를 확인하기 위해이 배열을 반복합니다. 로그인 상태에 대한 제한 내 코드에 usertype을 설정했습니다.

저는 어떤 사용자에게도 기능을 추가하고 코드를 너무 많이 수정하지 않고도 모든 사용자를 추가 할 수있는보다 유연한 접근 방식을 찾고 있습니다.

답변

1

아키텍처 측면에서 질문은 Best Design for a User/Role Management System?과 유사합니다. 거기에 대답은 role-based access control (RBAC) 패턴을 사용하는 것이 좋습니다. 이는 귀하의 경우에도 의미가 있습니다.

는 기본적으로 각 사용자 알고 하나 개 이상의 역할 (당신이 사용자 유형라는 것). 각 역할은 수행 할 수있는 하나 이상의 (기능)을 수행 할 수 있습니다. 당신이 새로운 기능을 추가하려면

새 소스 코드를 포함 작동에서 파생 된 새로운 클래스를 만들고, 그것에 대하여 모든 appropiate 역할을를 연결해야합니다. 새 사용자 나 새 역할을 추가하려는 경우 새 소스 코드를 만들 필요가 없으므로 새 클래스는 만들지 않고 클래스 제목 또는 역할의 새 개체 만 만들고 적절하게 연결하십시오. 당신이 그들을 변경하는 코드를 수정할 필요가 없습니다 있도록 앱의 외부 구성으로하고 역할 코드에서 -creation - 당신의 응용 프로그램의 유지 보수를 위해

, 당신은 쉽게 사용자를 추출 할 수 . 이것은 클래스를 만들거나 수정할 필요가 없기 때문에 잘 작동합니다. 그러나 조작을 변경하는 경우이므로 앱 외부에서 구성하기가 더 어려우며 가장 좋은 방법은 새 클래스를 만드는 것입니다. 물론 가능합니다. 플러그인 메커니즘.