1

Form1 に TreeView があります。TreeView を変更することを目的とした「User」というクラスがあります。TreeView をグローバルにして、User クラスからアクセスできるようにすることは可能ですか?

4

1 に答える 1

2

一般に、UI は、残りのすべての「ビジネス ロジック」の上にあるレイヤーである必要があります。

たとえばUserManager、コレクションを公開するクラスがIEnumerable<User>あり、そこからツリーを生成する場合があります。UI 上のイベントは、ビジネス ロジックへの呼び出しになります。

ビジネス ロジックで UI を更新する必要がある場合は、イベントとして公開する必要があります。イベントは本質的に、.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 に移動することができ、ビジネス ロジックに触れる必要はありません。それを呼び出し、そこからのイベントをリッスンするコードのみ。

于 2013-05-05T20:08:36.660 に答える