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