• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
    • 軟件測試技術
    • 軟件測試博客
    • 軟件測試視頻
    • 開源軟件測試技術
    • 軟件測試論壇
    • 軟件測試沙龍
    • 軟件測試資料下載
    • 軟件測試雜志
    • 軟件測試人才招聘
      暫時沒有公告

    字號: | 推薦給好友 上一篇 | 下一篇

    軟件SOA中怎樣確定服務的粒度

    發布: 2009-8-31 10:49 | 作者: 不詳 | 來源: 領測軟件測試網 | 查看: 87次 | 進入軟件測試論壇討論

    領測軟件測試網

    這樣的設計思路也體現了SOA的自頂向下的設計方法:功能模塊->服務->組件和業務對象。服務不是憑空想象出來的,它必須要滿足客戶的需求,而客戶需求的體現就是系統要提供的功能,所以功能模塊的設計是服務設計的前提。以我們團隊這次IBM大賽的方案為例子,我們在理解大賽組委會給出的業務需求外,自己也設想了一些需求,對應這些需求,我們設計了系統的功能模塊。不同的業務角色有不同的業務需求,所以功能模塊對應不同的角色也就有所不同。下面的圖列舉的是財務人員所需要的功能模塊:
     
     系統功能模塊是系統提供的各類服務的編排和合成。在設計完系統的功能模塊后,在這個基礎上把各個功能模塊的服務提取出來,一個功能模塊可能由一個服務組成,也可能由多個服務組成。

     服務的基礎是組件,一些重要的組件能夠單獨封裝成服務;A服務其實就是一個業務組件,它是基于商務對象的原子操作。它是封裝好的組件,它只關心定義好的組件接口,和需要傳遞的對象,而不關心實現這個操作是如何用代碼來實現。業務組件包含兩個重要的含義,一個是“操作”,一個是“操作的對象”。組件的設計是基于面向對象的,可以說,它就是一個類,但它只能是一個抽象類,只有定義,沒有實現。

    基礎服務跟合成服務、組合服務之間的關系可以用下面的圖來舉個例子:


     訂單處理服務(Order Service)是各種基本服務的組合,基本服務包括產品類別服務(ProdClass Service)、產品庫存服務(ProdStorage Service)、客戶信息服務(Cust Service)、消息服務(Msg Service)等等;痉⻊蔗槍σ粋特定的業務操作對象,比如客戶信息服務處理的是客戶信息,它操作的對象就是客戶信息,操作就包括新增、修改、刪除、查找等等基本操作。訂單處理服務包括了各種基本服務,但它不是同時調用這些基本服務,而是必須按照一定的工作流程,比如先新增客戶信息,然后再查找產品類別、產品庫存,然后再發送消息,這些順序由工作流引擎來控制。

    同步服務(Synchronize Service)是各種基本服務的合成,基本服務包括產品類別服務(ProdClass Service)、產品庫存服務(ProdStorage Service)、客戶信息服務(Cust Service)等等。相比訂單處理它就簡單不少,它只需要根據請求調用相應的服務完成操作就可以,沒有順序的要求。

     雖然本文描述的只是一種業務場景下的服務粒度的選擇,但我想從我們團隊的設計經歷,可以總結出一種對服務粒度選擇的方法,那就是自頂向下,由粗到細,然后再從基礎到合成、組合。

    延伸閱讀

    文章來源于領測軟件測試網 http://www.kjueaiud.com/

    22/2<12

    關于領測軟件測試網 | 領測軟件測試網合作伙伴 | 廣告服務 | 投稿指南 | 聯系我們 | 網站地圖 | 友情鏈接
    版權所有(C) 2003-2010 TestAge(領測軟件測試網)|領測國際科技(北京)有限公司|軟件測試工程師培訓網 All Rights Reserved
    北京市海淀區中關村南大街9號北京理工科技大廈1402室 京ICP備10010545號-5
    技術支持和業務聯系:info@testage.com.cn 電話:010-51297073

    軟件測試 | 領測國際ISTQBISTQB官網TMMiTMMi認證國際軟件測試工程師認證領測軟件測試網

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>