2010年8月19日 星期四

Method Chaining

原本在開發程式的時候,一個物件的 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 大量地使用這樣的設計,方便程式開發人員使用。

這樣也有個缺點,會造成程式可讀性較差。總地來說,還是優點較大呢。

沒有留言:

Share with Facebook