原本在開發程式的時候,一個物件的 instant 如果需要連續地執行某些動作時,程式會類似下面範例程式。
using System; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var c = new MyClass(); c.Do1(); c.Do2(); c.Do3(); } } internal class MyClass { public void Do1() { Console.WriteLine("Do1"); } public void Do2() { Console.WriteLine("Do2"); } public void Do3() { Console.WriteLine("Do3"); } } }
instance c 必須呼叫 Do1, Do2, Do3, instance c 必須寫三次 c., c., c.
Method Chaining 則是另一種物件行為的設計方式。將上述 MyClass 的 void Method 改回傳物件本身,就可以達到另一種呼叫方式。
using System; namespace ConsoleApplication4 { class Program { static void Main(string[] args) { var c = new MyClass(); c.Do1().Do2().Do3(); } } internal class MyClass { public MyClass Do1() { Console.WriteLine("Do1"); return this; } public MyClass Do2() { Console.WriteLine("Do2"); return this; } public MyClass Do3() { Console.WriteLine("Do3"); return this; } } }
看到了嗎?可以改成 c1.Do1().Do2().Do3() 的方式來呼叫,是不是很簡潔呢?
使用 Method chaining 的 API,是源自 small talk 語言的習慣,近來的 jQuery 大量地使用這樣的設計,方便程式開發人員使用。
這樣也有個缺點,會造成程式可讀性較差。總地來說,還是優點較大呢。
沒有留言:
張貼留言