享受代码,享受人生

SOA is an integration solution. SOA is message oriented first.
The Key character of SOA is loosely coupled. SOA is enriched
by creating composite apps.
  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

Constains --- Something i want

Posted on 2006-07-14 23:41  idior  阅读(2364)  评论(0编辑  收藏  举报

Something i Want

如果你经常重构的话,那么你会发现Extract Method是一个常用的方法,并且随着你不断的Extract

Method,渐渐的你的代码种就会浮现出Template Method模式。

以下就是一个Template Method的示例

abstract class CheckBackground
{

    protected abstract void CheckBank();
    protected abstract void CheckCredit();
    protected abstract void CheckLoan();
    protected abstract void CheckStock();
    protected abstract void CheckIncome();

    //work as template method
    public void Check()
    {
        CheckBank();
        CheckCredit();
        CheckLoan();
        CheckStock();
        CheckIncome();
    }
}

用abstract class来实现Template Method是一种比较好的方法,但是相对于abstract class而言interface是更常用的定义contract的方式。但是interface却要求所有的方法都是public,而Template Method中包含的其他方法往往是private和protected的。

那么我就希望有一种机制可以保证Template Method能够被安全的实现。
利用constains关键字来定义某个方法中需要包含的方法以及它们出现的顺序
constains CheckConstains
{
     void CheckBank();
     void CheckCredit();
     void CheckLoan();
     void CheckStock();
     void CheckIncome();
}

public interface ICheckBackground
{
    [CheckConstains]
    void Check();
}


作为程序员,在编程的时候最怕的是要记住某些上下文,才能把代码正确的写出来,这样是很不可靠的。
我们当然希望在编程的时候需要记住的东西越少越好,而Template Method模式的应用又是如此的广泛,所以我觉得需要以上这种约束, 这样在以后为ICheckBackground添加新的实现的时候就不会出问题了。