2013-05-05 2 views
1

Form1에 TreeView가 있습니다. 내 의도는 TreeView 수정할 "사용자"라는 클래스가 있습니다. TreeView를 전역으로 만들고 User 클래스에서 액세스 할 수 있습니까?TreeView를 전역으로 만들 수 있습니까?

+3

아주 저조한 디자인입니다. 클래스가 UI에 연결되어서는 안됩니다. – SLaks

+0

내가 계속 나아가면서 그것이 더욱 분명 해지고 있습니다. 나는 그것을 함께 구 trying 주려고 노력했다. 나는 나의 접근법을 재평가해야 할 것이다. 감사. – GoodBoyNYC

+0

User 클래스의 대리자를 Form1 폼에 사용하십시오. – Max

답변

2

일반적으로 UI는 나머지 모든 "비즈니스 로직"위에 레이어 여야합니다.

예를 들어 트리를 채우는 IEnumerable<User> 콜렉션을 노출하는 일부 UserManager 클래스가있을 수 있습니다. UI의 이벤트로 인해 비즈니스 로직이 호출됩니다.

비즈니스 로직의 요소가 UI를 업데이트해야하는 경우 events으로 표시되어야합니다. 이벤트는 본질적으로 .NET의 "콜백 함수"입니다. UI에는 해당 이벤트에 대해 등록 된 이벤트 핸들러가 있으며 비즈니스 레이어가 변경 사항을 나타낼 때 그에 따라 업데이트됩니다.

class User { } 
class UserManager { 
    public IEnumerable<User> Users { get { ... } } 

    public event UserLoggedInEventHandler UserLoggedIn; 

} 


class UI { 
    private UserManager m_usrMgr; 

    public UI() { 
     m_usrMgr = UserManager.GetSingletonInstance(); 
     m_usrMgr.UserLoggedIn += UserLoggedInHandler; 
    } 

    private void AddUserButtonClicked(...) { 
     m_userMgr.AddUser(username, ...); 
    } 

    private void UserLoggedInHandler(...) { 
     MessageBox.Show("User x logged in"); 
    } 
} 

이벤트를 사용하면 클래스를 분리 할 수 ​​있습니다. 잘 설계된 시스템을 사용하면 전체 시스템을 다른 UI로 옮기고 비즈니스 로직을 접할 필요가 없습니다. 그것을 호출하는 코드 만이 그 이벤트를 수신합니다.

관련 문제