[轉]企業應用開發架構談(一)

nighthun發表於2008-05-23
企業應用開發架構談(一)
即便是在有了企業級軟體的今天,我也常常發覺開發企業級應 用程式是個難題。無論是.net還是僅僅使用他們所提供的高階 抽象API來開發企業級應用是遠遠不夠的。在我看來一個構建在這些 高階API上的良好的體系結構是開發成功的企業級應用所不可或缺的。 本文要談論的就是如何構建一個良好的、可維護的、可擴充套件、高穩 定性的且能夠快速開發應用的開發架構。

  在我接觸 或J2EE 開發過程中,走了大量的彎路,使得開發的程 序不是效能不好,就是無法滿足目標和要求,相信同樣的錯誤今天仍 然在不斷的重複出現,這就要求我們吸取教訓,減少創造無用的程式。

  儘管有了高階的抽象API,但構架系統不光是使用API那麼簡單,從更高層 的抽象來說,透過使用構件策略和模式來建立構架體系,是解決開發中遇 到的一系列問題的關鍵。

  如: 會話如何跟蹤?

  誰來負責資料檢驗?

  層鍵的資料如何傳送?

  檢視、模型、控制? 如何分發檢視?

  等等。。。。。。。。。。。。

  在這篇文章中我不採用例項的方式來講解。因為我發現,儘管透過實 例有很多的優點,但往往讀者無法堅持完成整個例子,同時限於本文 的篇幅,採用例項法也是不可取得。

  我將在文章中討論在開發企業架構中我所遇到的一系列問題:

  檢視--模型--實體

  定位 資源的可配置

  持久化

  出版---訂閱

  資料校驗

主鍵生成

  資料更新

  資料傳送

  動態賦值

  控制-分發

  物件介面

  代理

  在談到我將要討論的問題前,我希望你先要了解什麼是模式,我不打算在 有限的篇幅中討論模式,這是一個很廣的問題。但必須首先宣告的得是, 你閱讀本文對模式的瞭解是基本要求,企業開發中模式將被大量使用,我 相信一個優雅,成功的系統模式的使用是不可少的。

  關於模式的更多資訊你可以參考 GOF 96 、SUN  DESIGN PATTERNS CORE、J2EE DESIGN PATTERNS 等文章。

  第一部分 定位

  一個有序的世界總是好的。

  小時候玩玻璃球和三角,開始的時候總是將嬴來玻璃球放到一個盒子中,漸漸 的越來越多,於是我將他們分類,有瑕疵的放到一起,普通的放到一起,高階 的(可以一個換兩到三個)放到一起,同樣的三角也是如此存放,這樣一來我 能夠很容易的決定每次帶什麼樣的出去玩。

  開發架構的時候我碰到同樣的問題,譬如大量的值物件、命令bean、檢視helper 散落在各處,有序的管理他們勢必成為優先要解決的問題。試想如果有一種目錄 結構來管理這些類該有多好。

  我是一個工廠的狂熱愛好者,我總是透過工廠來管理這些無序的資源,以便於通 過目錄的方式定位資源,不可避免的造成了系統中出現越來越多的工廠,我把管 理這些工廠稱為工廠定位器模式。

  為了清晰的描述我的想法,我喜歡透過程式碼來說明,這用的問題簡單明瞭。

程式碼如下: /*工廠定位器*/

public interface FactoryFinder{

public final static int ACTION_MAPPING_FACTORY=1;
public final static int MESSAGE_RESOURCES_FACTORY=2;
public final static int VALUE_OBJECT_FACTORY=3;
public final static int FORWARD_MAPPING_FACTORY=4;
public final static int LIFE_CYCLE_FACTORY=5;
public static Factory getFactory(int finderName);
}

/*工廠標誌介面*/

public interface Factory
{
} /*生命週期管理器*/
public interface LifecycleFactory
{
public final static int DEFAULT_LIFE_CYCLE=1;
public Lifecycle getLifecycle(String Key);
} /*訊息註冊工廠*/

public interface MessageResourcesFactory extends Factory
{
public addMsgResource(String Key ,String resourceName);
} /* /*監聽器註冊工廠*/

public interface ActionMappingFactory extends Factory
{
public addActionMapping(String Key,String resourceName);
} /*值物件註冊工廠*/

public interface BeanMappingFactory extends Factory
{
public addBeanMapping(String Key,String resourceName);
} /*分發檢視註冊工廠*/

public interface FowardMappingFactory extends Factory
{
public addForwardMapping(String Key,String resourceName);
} /*監聽器工廠*/

public interface ListenerFactory extends Factory
{
public final static int ACTION_LISTENER=1;
public final static int VALUE_CHANGED_LISTENER=2;
public final static int HLINK_LISTENER=3;
public Listener createListener(String listenerName,int type);
} /*bean 工廠*/

public interface BeanFactory extends Factory
{
public Object createBean(String beanName);
} /*Lifecycle 工廠*/

public interface Lifecycle extends Factory
{
public void register();
}

如你所看到那樣工廠定位器模式其實就是一個工廠模式,但我重新將它命名 為工廠定位器模式,這是因為,它不簡簡單單作為一個設計模式而存在,在 這裡它被賦予新的含義“有效管理架構中的一種策略“。透過它的有效組 織資源,你可以方便的定位架構中任何可用資源。 同樣的定位方式,我們可以用來組織服務定位,譬如:查詢ejb,資料連線等。 服務定位器模式就是定位的另一個應用:

  程式碼如下: /* 實現主鍵獲取、資料連線獲取、home介面獲取 */

public interface ServiceLocator
{
public static ServiceLocator getInstance();
public EJBHome getEJBHome(String serverID,String homeName);
public Connection getConnection();
public BigDecimal getNextID(String systemCode);
}

  透過服務定位 ,可以有效的減少服務成本,提高系統的效能。 正如上面所說的,在一個體系中定位資源是重要,這是組織整個架構的基礎, 無論什麼樣的事件都是由個體組成,而有序的安排個體總是有序世界的第一 步。 在這一部分裡,簡要的談了資源定位問題,下一部分將討論資源的可配置問題。

[@more@]

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/106943/viewspace-1004469/,如需轉載,請註明出處,否則將追究法律責任。

相關文章