嗨,我一直在尋找一個解決方案來解決我們的代碼庫的棘手問題。C#嵌套屬性訪問重載或順序操作符重載
要開始,我們的代碼如下所示:
class User
{
int id;
int accountId;
Account account
{
get { return Account.Get(accountId); }
}
}
class Account
{
int accountId;
OnlinePresence Presence
{
get { return OnlinePresence.Get(accountId); }
}
public static Account Get(int accountId)
{
// hits a database and gets back our object.
}
}
class OnlinePresence
{
int accountId;
bool isOnline;
public static OnlinePresence Get(int accountId)
{
// hits a database and gets back our object.
}
}
我們現在經常做的我們的代碼是試圖做
var presence = user.Account.Presence;
問題訪問用戶的帳戶存在這是因爲這實際上是向數據庫發出兩個請求。一個獲取Account對象,然後一個獲取Presence對象。我們可以很容易地敲下來到一個請求,如果我們做了以下內容:
var presence = UserPresence.Get(user.id);
這個工作,但那種要求開發人員具有的UserPresence類/方法將是很好消除的理解。
我想到了一些很酷的方法可以處理這個問題,並想知道是否有人知道這些是否可能,如果還有其他方式來處理這個問題,或者我們只需要考慮更多因爲我們正在編碼並執行UserPresence.Get而不是使用屬性。
重載嵌套訪問器。 如果在User類內部,我可以編寫某種「擴展」,它會說「任何時候用戶對象的Account屬性的Presence對象被訪問,而不是這個」,這將是很酷的。
重載。操作人員瞭解後續內容。 如果我能以某種方式超載。只有在右邊的對象也被「加點」的情況下,操作員纔會很棒。
這兩個看起來都像是可以在編譯時處理的事情,但也許我錯過了一些東西(反射會使它難嗎?)。我是否完全錯誤地看待事物?有沒有強制執行這種方法來消除業務邏輯用戶的負擔?
謝謝! 添