344. Proxies

אני מתחיל היום סדרה חדשה שמתעסקת בProxies ומה שמסביב.

למה אני מתכוון כשאני אומר Proxies?

נניח שיש לנו איזשהו ממשק. עכשיו, אנחנו מעוניינים ליצור טיפוס המממש את הממשק, אבל לספק איזושהי התנהגות כללית שתקרה כאשר יקראו לפונקציות של הממשק. לדוגמה, נניח שיש לנו את הממשק הזה:

1
2
3
4
5
6
public interface IBank
{
void Deposit(string id, int amount);
void Withdraw(string id, int amount);
int GetAvailableBudget(string id);
}

אז נוכל לממש את הממשק ע"י התנהגות אחידה: כתיבת הפרמטרים למסך:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
public class BankProxy : IBank
{
public void Deposit(string id, int amount)
{
WriteValues(new MethodCallInfo("Deposit")
{
{"id", id},
{"amount", amount}
});
}
public void Withdraw(string id, int amount)
{
WriteValues(new MethodCallInfo("Withdraw")
{
{"id", id},
{"amount", amount}
});
}
public int GetAvailableBudget(string id)
{
WriteValues(new MethodCallInfo("GetAvailableBudget")
{
{"id", id},
});
return 0;
}
private void WriteValues(MethodCallInfo methodCallInfo)
{
Console.WriteLine("In method {0}", methodCallInfo.Name);
foreach (KeyValuePair<string, object> parameter in methodCallInfo)
{
Console.WriteLine("Parameter {0}:{1}", parameter.Key, parameter.Value);
}
}
}

להתנהגות כזאת אני קורא Proxy – מאחר ובעצם כל הפונקציות ממומשות ע"י קריאה לפונקציה מסוימת – כלומר הן מבצעות Proxy אליה.

בפעמים הבאות נדבר עוד על Proxyים, נראה שימושים (מדהימים!), ונדבר על דרכים אפשריות למימוש.

שבוע מיופה כוח טוב!

שתף