中文字幕人妻中文_99精品欧美一区二区三区综合在线_精品久久久久一区二区_色月丁香_免费福利在线视频_欧美大片免费观看网址_国产伦精品一区二区三区在线播放_污污污污污污www网站免费_久久月本道色综合久久_色69激情爱久久_尹人香蕉久久99天天拍_国产美女www_亚洲国产精品无码7777一线_五月婷婷六月激情_看免费一级片_精品久久久久久成人av_在线色亚洲_女人另类性混交zo_国产精品青青在线观看爽香蕉_人人澡人人添人人爽一区二区

主頁 > 知識庫 > 《解剖PetShop》之五:PetShop之業(yè)務(wù)邏輯層設(shè)計

《解剖PetShop》之五:PetShop之業(yè)務(wù)邏輯層設(shè)計

熱門標簽:聯(lián)通官網(wǎng)400電話辦理 網(wǎng)絡(luò)電話外呼系統(tǒng)上海 臨沂智能電話機器人加盟 地圖標注軟件免費下載 400電話辦理怎么樣 西寧呼叫中心外呼系統(tǒng)線路商 百應(yīng)電話機器人外呼系統(tǒng) 蘇州如何辦理400電話 外呼電話機器人成本

五 PetShop之業(yè)務(wù)邏輯層設(shè)計

  業(yè)務(wù)邏輯層(Business Logic Layer)無疑是系統(tǒng)架構(gòu)中體現(xiàn)核心價值的部分。它的關(guān)注點主要集中在業(yè)務(wù)規(guī)則的制定、業(yè)務(wù)流程的實現(xiàn)等與業(yè)務(wù)需求有關(guān)的系統(tǒng)設(shè)計,也即是說它是與系統(tǒng)所應(yīng)對的領(lǐng)域(Domain)邏輯有關(guān),很多時候,我們也將業(yè)務(wù)邏輯層稱為領(lǐng)域?qū)印@鏜artin Fowler在《Patterns of Enterprise Application Architecture》一書中,將整個架構(gòu)分為三個主要的層:表示層、領(lǐng)域?qū)雍蛿?shù)據(jù)源層。作為領(lǐng)域驅(qū)動設(shè)計的先驅(qū)Eric Evans,對業(yè)務(wù)邏輯層作了更細致地劃分,細分為應(yīng)用層與領(lǐng)域?qū)樱ㄟ^分層進一步將領(lǐng)域邏輯與領(lǐng)域邏輯的解決方案分離。

  業(yè)務(wù)邏輯層在體系架構(gòu)中的位置很關(guān)鍵,它處于數(shù)據(jù)訪問層與表示層中間,起到了數(shù)據(jù)交換中承上啟下的作用。由于層是一種弱耦合結(jié)構(gòu),層與層之間的依賴是向下的,底層對于上層而言是“無知”的,改變上層的設(shè)計對于其調(diào)用的底層而言沒有任何影響。如果在分層設(shè)計時,遵循了面向接口設(shè)計的思想,那么這種向下的依賴也應(yīng)該是一種弱依賴關(guān)系。因而在不改變接口定義的前提下,理想的分層式架構(gòu),應(yīng)該是一個支持可抽取、可替換的“抽屜”式架構(gòu)。正因為如此,業(yè)務(wù)邏輯層的設(shè)計對于一個支持可擴展的架構(gòu)尤為關(guān)鍵,因為它扮演了兩個不同的角色。對于數(shù)據(jù)訪問層而言,它是調(diào)用者;對于表示層而言,它卻是被調(diào)用者。依賴與被依賴的關(guān)系都糾結(jié)在業(yè)務(wù)邏輯層上,如何實現(xiàn)依賴關(guān)系的解耦,則是除了實現(xiàn)業(yè)務(wù)邏輯之外留給設(shè)計師的任務(wù)。

5.1  與領(lǐng)域?qū)<液献?/strong>

  設(shè)計業(yè)務(wù)邏輯層最大的障礙不在于技術(shù),而在于對領(lǐng)域業(yè)務(wù)的分析與理解。很難想象一個不熟悉該領(lǐng)域業(yè)務(wù)規(guī)則和流程的架構(gòu)設(shè)計師能夠設(shè)計出合乎客戶需求的系統(tǒng)架構(gòu)。幾乎可以下定結(jié)論的是,業(yè)務(wù)邏輯層的設(shè)計過程必須有領(lǐng)域?qū)<业膮⑴c。在我曾經(jīng)參與開發(fā)的項目中,所涉及的領(lǐng)域就涵蓋了電力、半導(dǎo)體、汽車等諸多行業(yè),如果缺乏這些領(lǐng)域的專家,軟件架構(gòu)的設(shè)計尤其是業(yè)務(wù)邏輯層的設(shè)計就無從談起。這個結(jié)論唯一的例外是,架構(gòu)設(shè)計師同時又是該領(lǐng)域的專家。然而,正所謂“千軍易得,一將難求”,我們很難尋覓到這樣卓越出眾的人才。

  領(lǐng)域?qū)<以趫F隊中扮演的角色通常稱為Business Consultor(業(yè)務(wù)咨詢師),負責提供與領(lǐng)域業(yè)務(wù)有關(guān)的咨詢,與架構(gòu)師一起參與架構(gòu)與數(shù)據(jù)庫的設(shè)計,撰寫需求文檔和設(shè)計用例(或者用戶故事User Story)。如果在測試階段,還應(yīng)該包括撰寫測試用例。理想的狀態(tài)是,領(lǐng)域?qū)<覒?yīng)該參與到整個項目的開發(fā)過程中,而不僅僅是需求階段。

  領(lǐng)域?qū)<铱梢允菍iT聘請的對該領(lǐng)域具有較深造詣的咨詢師,也可以是作為需求提供方的客戶。在極限編程(Extreme Programming)中,就將客戶作為領(lǐng)域?qū)<乙氲秸麄€開發(fā)團隊中。它強調(diào)了現(xiàn)場客戶原則。現(xiàn)場客戶需要參與到計劃游戲、開發(fā)迭代、編碼測試等項目開發(fā)的各個階段。由于領(lǐng)域?qū)<遗c設(shè)計師以及開發(fā)人員組成了一個團隊,貫穿開發(fā)過程的始終,就可以避免需求理解錯誤的情況出現(xiàn)。即使項目的開發(fā)與實際需求不符,也可以在項目早期及時修正,從而避免了項目不必要的延期,加強了對項目過程和成本的控制。正如Steve McConnell在構(gòu)建活動的前期準備中提及的一個原則:發(fā)現(xiàn)錯誤的時間要盡可能接近引入該錯誤的時間。需求的缺陷在系統(tǒng)中潛伏的時間越長,代價就越昂貴。如果在項目開發(fā)中能夠與領(lǐng)域?qū)<页浞值暮献鳎涂梢宰畲笮Ч匾?guī)避這樣一種惡性的鏈式反應(yīng)。

  傳統(tǒng)的軟件開發(fā)模型同樣重視與領(lǐng)域?qū)<业暮献鳎@種合作主要集中在需求分析階段。例如瀑布模型,就非常強調(diào)早期計劃與需求調(diào)研。然而這種未雨綢繆的早期計劃方式,對架構(gòu)師與需求調(diào)研人員的技能要求非常高,它強調(diào)需求文檔的精確性,一旦分析出現(xiàn)偏差,或者需求發(fā)生變更,當項目開發(fā)進入設(shè)計階段后,由于缺乏與領(lǐng)域?qū)<覝贤ㄅc合作的機制,開發(fā)人員估量不到這些錯誤與誤差,因而難以及時作出修正。一旦這些問題像毒瘤一般在系統(tǒng)中蔓延開來,逐漸暴露在開發(fā)人員面前時,已經(jīng)成了一座難以逾越的高山。我們需要消耗更多的人力物力,才能夠修正這些錯誤,從而導(dǎo)致開發(fā)成本成數(shù)量級的增加,甚至于導(dǎo)致項目延期。當然還有一個好的選擇,就是放棄整個項目。這樣的例子不勝枚舉,事實上,項目開發(fā)的“滑鐵盧”,究其原因,大部分都是因為業(yè)務(wù)邏輯分析上出現(xiàn)了問題。

  迭代式模型較之瀑布模型有很大地改進,因為它允許變更、優(yōu)化系統(tǒng)需求,整個迭代過程實際上就是與領(lǐng)域?qū)<业暮献鬟^程,通過向客戶演示迭代所產(chǎn)生的系統(tǒng)功能,從而及時獲取反饋,并逐一解決迭代演示中出現(xiàn)的問題,保證系統(tǒng)向著合乎客戶需求的方向演化。因而,迭代式模型往往能夠解決早期計劃不足的問題,它允許在發(fā)現(xiàn)缺陷的時候,在需求變更的時候重新設(shè)計、重新編碼并重新測試。

  無論采用何種開發(fā)模型,與領(lǐng)域?qū)<业暮献鞫紝⒊蔀轫椖砍蓴∨c否的關(guān)鍵。這基于一個軟件開發(fā)的普遍真理,那就是世界上沒有不變的需求。一句經(jīng)典名言是:“沒有不變的需求,世上的軟件都改動過3次以上,唯一一個只改動過兩次的軟件的擁有者已經(jīng)死了,死在去修改需求的路上。”一語道盡了軟件開發(fā)的殘酷與艱辛!

  那么應(yīng)該如何加強與領(lǐng)域?qū)<业暮献髂兀縅ames Carey和Brent Carlson根據(jù)他們在參與的IBM SanFrancisco項目中獲得的經(jīng)驗,提出了Innocent Questions模式,其意義即“改進領(lǐng)域?qū)<液图夹g(shù)專家的溝通質(zhì)量”。在一個項目團隊中,如果我們沒有一位既能擔任首席架構(gòu)師,同時又是領(lǐng)域?qū)<业娜诉x,那么加強領(lǐng)域?qū)<遗c技術(shù)專家的合作就顯得尤為重要了。畢竟,作為一個領(lǐng)域?qū)<叶裕赡懿⒉皇煜ぼ浖O(shè)計方法學(xué),也不具備面向?qū)ο箝_發(fā)和架構(gòu)設(shè)計的能力,同樣,大部分技術(shù)專家很有可能對該項目所涉及的業(yè)務(wù)領(lǐng)域僅停留在一知半解的地步。如果領(lǐng)域?qū)<遗c技術(shù)專家不能有效溝通,則整個項目的前途就岌岌可危了。

Innocent Questions模式提出的解決方案包括:

(1)選用可以與人和諧相處的人員組建開發(fā)團隊;
(2)清楚地定義角色和職權(quán);
(3)明確定義需要的交互點;
(4)保持團隊緊密;
(5)雇傭優(yōu)秀的人。

  事實上,這已經(jīng)從技術(shù)的角度上升到對團隊的管理層次了。就好比籃球運動一樣,即使你的球隊集合了五名世界上最頂尖最有天賦的球員,如果各自為戰(zhàn),要想取得比賽的勝利依舊是非常困難的。團隊精神與權(quán)責分明才是取得勝利的保障,軟件開發(fā)同樣如此。

  與領(lǐng)域?qū)<液献鞯幕A(chǔ)是保證開發(fā)團隊中永遠保留至少一名領(lǐng)域?qū)<摇K梢允窍到y(tǒng)的客戶,第三方公司的咨詢師,最理想是自己公司雇傭的專家。如果項目中缺乏這樣的一個人,那么我的建議是去雇傭他,如果你不想看到項目遭遇“西伯利亞寒流”的話。

  確定領(lǐng)域?qū)<业慕巧蝿?wù)與職責。必須要讓團隊中的每一個人明確領(lǐng)域?qū)<以谡麄€團隊中究竟扮演什么樣的角色,他的職責是什么。一個合格的領(lǐng)域?qū)<冶仨殞I(yè)務(wù)領(lǐng)域有足夠深入的理解,他應(yīng)該是一個能夠俯瞰整個系統(tǒng)需求、總攬全局的人物。在項目開發(fā)過程中,將由他負責業(yè)務(wù)規(guī)則和流程的制定,負責與客戶的溝通,需求的調(diào)研與討論,并于設(shè)計師一起參與系統(tǒng)架構(gòu)的設(shè)計。編檔是領(lǐng)域?qū)<冶仨殔⑴c的工作,無論是需求文檔還是設(shè)計文檔,以及用例的編寫,領(lǐng)域?qū)<一蛘咛岢鲆庖姡蛘咦鳛樽珜懙淖髡撸辽偎矐?yīng)該是評審委員會的重要成員。

  規(guī)范業(yè)務(wù)領(lǐng)域的術(shù)語和技術(shù)術(shù)語。領(lǐng)域?qū)<液图夹g(shù)專家必須在保證不產(chǎn)生二義性的語義環(huán)境下進行溝通與交流。如果出現(xiàn)理解上的分歧,我們必須及時解決,通過討論確立術(shù)語標準。很難想象兩個語言不通的人能夠相互合作愉快,解決的辦法是加入一位翻譯人員。在領(lǐng)域?qū)<遗c技術(shù)專家之間搭建一座語義上的橋梁,使其能夠相互理解、相互認同。還有一個辦法是在團隊內(nèi)部開展培訓(xùn)活動。尤其對于開發(fā)人員而言,或多或少地了解一些業(yè)務(wù)領(lǐng)域知識,對于項目的開發(fā)有很大的幫助。在我參與過的半導(dǎo)體領(lǐng)域的項目開發(fā),團隊就專門邀請了半導(dǎo)體行業(yè)的專家就生產(chǎn)過程的業(yè)務(wù)邏輯進行了全方位的介紹與培訓(xùn)。正所謂“磨刀不誤砍柴工”,雖然我們消費了培訓(xùn)的時間,但對于掌握了業(yè)務(wù)規(guī)則與流程的開發(fā)人員,卻能夠提升項目開發(fā)進度,總體上節(jié)約了開發(fā)成本。

  加強與客戶的溝通。客戶同時也可以作為團隊的領(lǐng)域?qū)<遥瑯O限編程的現(xiàn)場客戶原則是最好的示例。但現(xiàn)實并不都如此的完美,在無法要求客戶成為開發(fā)團隊中的固定一員時,聘請或者安排一個專門的領(lǐng)域?qū)<遥訌娕c客戶的溝通,就顯得尤為重要。項目可以通過領(lǐng)域?qū)<耀@得客戶的及時反饋。而通過領(lǐng)域?qū)<胰チ私庾兏说男枨螅瑫谧畲蟪潭壬蠝p少需求誤差的可能。

5.2  業(yè)務(wù)邏輯層的模式應(yīng)用

  Martin Fowler在《企業(yè)應(yīng)用架構(gòu)模式》一書中對領(lǐng)域?qū)樱礃I(yè)務(wù)邏輯層)的架構(gòu)模式作了整體概括,他將業(yè)務(wù)邏輯設(shè)計分為三種主要的模式:Transaction Script、Domain Model和Table Module。

  Transaction Script模式將業(yè)務(wù)邏輯看作是一個個過程,是比較典型的面向過程開發(fā)模式。應(yīng)用Transaction Script模式可以不需要數(shù)據(jù)訪問層,而是利用SQL語句直接訪問數(shù)據(jù)庫。為了有效地管理SQL語句,可以將與數(shù)據(jù)庫訪問有關(guān)的行為放到一個專門的Gateway類中。應(yīng)用Transaction Script模式不需要太多面向?qū)ο笾R,簡單直接的特性是該模式全部價值之所在。因而,在許多業(yè)務(wù)邏輯相對簡單的項目中,應(yīng)用Transaction Script模式較多。

  Domain Model模式是典型的面向?qū)ο笤O(shè)計思想的體現(xiàn)。它充分考慮了業(yè)務(wù)邏輯的復(fù)雜多變,引入了Strategy模式等設(shè)計模式思想,并通過建立領(lǐng)域?qū)ο笠约俺橄蠼涌冢瑢崿F(xiàn)模式的可擴展性,并利用面向?qū)ο笏枷肱c身俱來的特性,如繼承、封裝與多態(tài),用于處理復(fù)雜多變的業(yè)務(wù)邏輯。唯一制約該模式應(yīng)用的是對象與關(guān)系數(shù)據(jù)庫的映射。我們可以引入ORM工具,或者利用Data Mapper模式來完成關(guān)系向?qū)ο蟮挠成洹?/p>

  與Domain Model模式相似的是Table Module模式,它同樣具有面向?qū)ο笤O(shè)計的思想,唯一不同的是它獲得的對象并非是單純的領(lǐng)域?qū)ο螅荄ataSet對象。如果為關(guān)系數(shù)據(jù)表與對象建立一個簡單的映射關(guān)系,那么Domain Model模式就是為數(shù)據(jù)表中的每一條記錄建立一個領(lǐng)域?qū)ο螅鳷able Module模式則是將整個數(shù)據(jù)表看作是一個完整的對象。雖然利用DataSet對象會丟失面向?qū)ο蟮幕咎匦裕跒楸硎緦犹峁?shù)據(jù)源支持方面卻有著得天獨厚的優(yōu)勢。尤其是在.Net平臺下,ADO.NET與Web控件都為Table Module模式提供了生長的肥沃土壤。

5.3  PetShop的業(yè)務(wù)邏輯層設(shè)計

  PetShop在業(yè)務(wù)邏輯層設(shè)計中引入了Domain Model模式,這與數(shù)據(jù)訪問層對于數(shù)據(jù)對象的支持是分不開的。由于PetShop并沒有對寵物網(wǎng)上商店的業(yè)務(wù)邏輯進行深入,也省略了許多復(fù)雜細節(jié)的商務(wù)邏輯,因而在Domain Model模式的應(yīng)用上并不明顯。最典型地應(yīng)該是對Order領(lǐng)域?qū)ο蟮奶幚矸绞剑ㄟ^引入Strategy模式完成對插入訂單行為的封裝。關(guān)于這一點,我已在第27章有了詳盡的描述,這里就不再贅述。

  本應(yīng)是系統(tǒng)架構(gòu)設(shè)計中最核心的業(yè)務(wù)邏輯層,由于簡化了業(yè)務(wù)流程的緣故,使得PetShop在這一層的設(shè)計有些乏善可陳。雖然在業(yè)務(wù)邏輯層中,針對B2C業(yè)務(wù)定義了相關(guān)的領(lǐng)域?qū)ο螅@些領(lǐng)域?qū)ο髢H僅是完成了對數(shù)據(jù)訪問層中數(shù)據(jù)對象的簡單封裝而已,其目的僅在于分離層次,以支持對各種數(shù)據(jù)庫的擴展,同時將SQL語句排除在業(yè)務(wù)邏輯層外,避免了SQL語句的四處蔓延。

  最能體現(xiàn)PetShop業(yè)務(wù)邏輯的除了對訂單的管理之外,還包括購物車(Shopping Cart)與Wish List的管理。在PetShop的BLL模塊中,定義了Cart類來負責相關(guān)的業(yè)務(wù)邏輯,定義如下:

[Serializable]
public class Cart
{
 private Dictionary cartItems = new Dictionary();
 public decimal Total
 {
  get
  {
   decimal total = 0;
   foreach (CartItemInfo item in cartItems.Values)
    total += item.Price * item.Quantity;
   return total;
  }
 }
 public void SetQuantity(string itemId, int qty)
 {
  cartItems[itemId].Quantity = qty;
 }
 public int Count
 {
  get { return cartItems.Count; }
 }
 public void Add(string itemId)
 {
  CartItemInfo cartItem;
  if (!cartItems.TryGetValue(itemId, out cartItem))
  {
   Item item = new Item();
   ItemInfo data = item.GetItem(itemId);
   if (data != null)
   {
    CartItemInfo newItem = new CartItemInfo(itemId, data.ProductName, 1, (decimal)data.Price, data.Name, data.CategoryId, data.ProductId);
    cartItems.Add(itemId, newItem);
   }
  }
  else
   cartItem.Quantity++;
 }
 //其他方法略;
}

  Cart類通過一個Dictionary對象來負責對購物車內(nèi)容的存儲,同時定義了Add、Remove、Clear等方法,來實現(xiàn)對購物車內(nèi)容的管理。

  在前面我提到PetShop業(yè)務(wù)邏輯層中的領(lǐng)域?qū)ο髢H僅是完成對數(shù)據(jù)對象的簡單封裝,但這種分離層次的方法在架構(gòu)設(shè)計中依然扮演了舉足輕重的作用。以Cart類的Add()方法為例,在方法內(nèi)部引入了PetShop.BLL.Item領(lǐng)域?qū)ο螅⒄{(diào)用了Item對象的GetItem()方法。如果沒有在業(yè)務(wù)邏輯層封裝Item對象,而是直接調(diào)用數(shù)據(jù)訪問層的Item數(shù)據(jù)對象,為保證層次間的弱依賴關(guān)系,就需要調(diào)用工廠對象的工廠方法來創(chuàng)建PetShop.IDAL.IItem接口類型對象。一旦數(shù)據(jù)訪問層的Item對象被多次調(diào)用,就會造成重復(fù)代碼,既不離于程序的修改與擴展,也導(dǎo)致程序結(jié)構(gòu)生長為臃腫的態(tài)勢。

  此外,領(lǐng)域?qū)ο髮?shù)據(jù)訪問層數(shù)據(jù)對象的封裝,也有利于表示層對業(yè)務(wù)邏輯層的調(diào)用。在三層式架構(gòu)中,表示層應(yīng)該是對于數(shù)據(jù)訪問層是“無知”的,這樣既減少了層與層間的依賴關(guān)系,也能有效避免“循環(huán)依賴”的后果。

  值得商榷的是Cart類的Total屬性。其值的獲取是通過遍歷購物車集合,然后累加價格與商品數(shù)量的乘積。這里顯然簡化了業(yè)務(wù)邏輯,而沒有充分考慮需求的擴展。事實上,這種獲取購物車總價格的算法,在大多數(shù)情況下僅僅是其中的一種策略而已,我們還應(yīng)該考慮折扣的情況。例如,當總價格超過100元時,可以給與顧客一定的折扣,這是與網(wǎng)站的促銷計劃相關(guān)的。除了給與折扣的促銷計劃外,網(wǎng)站也可以考慮贈送禮品的促銷策略,因此我們有必要引入Strategy模式,定義接口IOnSaleStrategy:

public interface IOnSaleStrategy
{
  decimal CalculateTotalPrice(Dictionary cartItems);
}

如此一來,我們可以為Cart類定義一個有參數(shù)的構(gòu)造函數(shù):

private IOnSaleStrategy m_onSale;
public Cart(IOnSaleStrategy onSale)
{
  m_onSale = onSale;
}

那么Total屬性就可以修改為:

public decimal Total
{
  get {return m_onSale.CalculateTotalPrice(cartItems);}
}

如此一來,就可以使得Cart類能夠有效地支持網(wǎng)站推出的促銷計劃,也符合開-閉原則。同樣的,這種設(shè)計方式也是Domain Model模式的體現(xiàn)。修改后的設(shè)計如圖5-1所示:

圖5-1 引入Strategy模式

  作為一個B2C的電子商務(wù)架構(gòu),它所涉及的業(yè)務(wù)領(lǐng)域已為大部分設(shè)計師與開發(fā)人員所熟悉,因而在本例中,與領(lǐng)域?qū)<业暮献黠@得并不那么重要。然而,如果我們要開發(fā)一個成功的電子商務(wù)網(wǎng)站,與領(lǐng)域?qū)<业暮献魅匀皇潜夭豢缮俚摹R杂唵蔚墓芾矶裕绻紤]復(fù)雜的商業(yè)應(yīng)用,就需要管理訂單的跟蹤(Tracking),與網(wǎng)上銀行的合作,賬戶安全性,庫存管理,物流管理,以及客戶關(guān)系管理(CRM)。整個業(yè)務(wù)過程卻涵蓋了諸如電子商務(wù)、銀行、物流、客戶關(guān)系學(xué)等諸多領(lǐng)域,如果沒有領(lǐng)域?qū)<业膮⑴c,業(yè)務(wù)邏輯層的設(shè)計也許會“敗走麥城”。

5.4  與數(shù)據(jù)訪問層的通信

  業(yè)務(wù)邏輯層需要與數(shù)據(jù)訪問層通信,利用數(shù)據(jù)訪問層訪問數(shù)據(jù)庫,因此業(yè)務(wù)邏輯層與數(shù)據(jù)訪問層之間就存在依賴關(guān)系。在數(shù)據(jù)訪問層引入接口程序集以及數(shù)據(jù)工廠的設(shè)計前提下,能夠做到兩者間關(guān)系為弱依賴。我們從業(yè)務(wù)邏輯層的引用程序集中可以看到,BLL模塊并沒有引用SQLServerDAL和OracleDAL程序集。在業(yè)務(wù)邏輯層中,有關(guān)數(shù)據(jù)訪問層中數(shù)據(jù)對象的調(diào)用,均利用多態(tài)原理定義了抽象的接口類型對象,然后利用工廠對象的工廠方法創(chuàng)建具體的數(shù)據(jù)對象。如PetShop.BLL.PetShop領(lǐng)域?qū)ο笏荆?/p>

namespace PetShop.BLL
{
 public class Product
 {
 //根據(jù)工廠對象創(chuàng)建IProduct接口類型實例;
  private static readonly IProduct dal = PetShop.DALFactory.DataAccess.CreateProduct();  
  //調(diào)用IProduct對象的接口方法GetProductByCategory();
 public IList
GetProductsByCategory(string category)
 {
 // 如果為空則新建List對象;
 if(string.IsNullOrEmpty(category))
 return new List ();

 // 通過數(shù)據(jù)訪問層的數(shù)據(jù)對象訪問數(shù)據(jù)庫;
 return dal.GetProductsByCategory(category);
 }
  //其他方法略;
 }
}

  在領(lǐng)域?qū)ο驪roduct類中,利用數(shù)據(jù)訪問層的工廠類DALFactory.DataAccess創(chuàng)建PetShop.IDAL.IProduct類型的實例,如此就可以解除對具體程序集SQLServerDAL或OracleDAL的依賴。只要PetShop.IDAL的接口方法不變,即使修改了IDAL接口模塊的具體實現(xiàn),都不會影響業(yè)務(wù)邏輯層的實現(xiàn)。這種松散的弱耦合關(guān)系,才能夠最大程度地支持架構(gòu)的可擴展。

  領(lǐng)域?qū)ο驪roduct實際上還完成了對數(shù)據(jù)對象Product的封裝,它們暴露在外的接口方法是一致地,正是通過封裝,使得表示層可以完全脫離數(shù)據(jù)庫以及數(shù)據(jù)訪問層,表示層的調(diào)用者僅需要關(guān)注業(yè)務(wù)邏輯層的實現(xiàn)邏輯,以及領(lǐng)域?qū)ο蟊┞兜慕涌诤驼{(diào)用方式。事實上,只要設(shè)計合理,規(guī)范了各個層次的接口方法,三層式架構(gòu)的設(shè)計完全可以分離開由不同的開發(fā)人員同時開發(fā),這就可以有效地利用開發(fā)資源,縮短項目開發(fā)周期。

5.5  面向接口設(shè)計

  也許是業(yè)務(wù)邏輯比較簡單地緣故,在業(yè)務(wù)邏輯層的設(shè)計中,并沒有秉承在數(shù)據(jù)訪問層中面向接口設(shè)計的思想。除了完成對插入訂單策略的抽象外,整個業(yè)務(wù)邏輯層僅以BLL模塊實現(xiàn),沒有為領(lǐng)域?qū)ο蠖x抽象的接口。因而PetShop的表示層與業(yè)務(wù)邏輯層就存在強依賴關(guān)系,如果業(yè)務(wù)邏輯層中的需求發(fā)生變更,就必然會影響表示層的實現(xiàn)。唯一可堪欣慰的是,由于我們采用分層式架構(gòu)將用戶界面與業(yè)務(wù)領(lǐng)域邏輯完全分離,一旦用戶界面發(fā)生更改,例如將B/S架構(gòu)修改為C/S架構(gòu),那么業(yè)務(wù)邏輯層的實現(xiàn)模塊是可以完全重用的。

  然而,最理想的方式仍然是面向接口設(shè)計。根據(jù)第28章對ASP.NET緩存的分析,我們可以將表示層App_Code下的Proxy類與Utility類劃分到業(yè)務(wù)邏輯層中,并修改這些靜態(tài)類為實例類,并將這些類中與業(yè)務(wù)領(lǐng)域有關(guān)的方法抽象為接口,然后建立如數(shù)據(jù)訪問層一樣的抽象工廠。通過“依賴注入”方式,解除與具體領(lǐng)域?qū)ο箢惖囊蕾嚕沟帽硎緦觾H依賴于業(yè)務(wù)邏輯層的接口程序集以及工廠模塊。

  那么,這樣的設(shè)計是否有“過度設(shè)計”的嫌疑呢?我們需要依據(jù)業(yè)務(wù)邏輯的需求情況而定。此外,如果我們需要引入緩存機制,為領(lǐng)域?qū)ο髣?chuàng)建代理類,那么為領(lǐng)域?qū)ο蠼⒔涌冢惋@得尤為必要。我們可以建立一個專門的接口模塊IBLL,用以定義領(lǐng)域?qū)ο蟮慕涌凇R訮roduct領(lǐng)域?qū)ο鬄槔覀兛梢越Product接口:

public interface IProduct
{
 IList GetProductByCategory(string category);
 IList GetProductByCategory(string[] keywords);
 ProductInfo GetProduct(string productId);
}

在BLL模塊中可以引入對IBLL程序集的依賴,則領(lǐng)域?qū)ο驪roduct的定義如下:

public class Product:IProduct
{
 public IList GetProductByCategory(string category) { //實現(xiàn)略; }
 public IList GetProductByCategory(string[] keywords) { //實現(xiàn)略; }
 public ProductInfo GetProduct(string productId) { //實現(xiàn)略; }
}

然后我們可以為代理對象建立專門的程序集BLLProxy,它不僅引入對IBLL程序集的依賴,同時還將依賴于BLL程序集。此時代理對象ProductDataProxy的定義如下:

using PetShop.IBLL;
using PetShop.BLL;
namespace PetShop.BLLProxy
{
 public class ProductDataProxy:IProduct
 {
  public IList GetProductByCategory(string category)
  {
  Product product = new Product();
  //其他實現(xiàn)略;
  }
  public IList GetProductByCategory(string[] keywords) { //實現(xiàn)略; }
  public ProductInfo GetProduct(string productId) { //實現(xiàn)略; }
 }
}

如此的設(shè)計正是典型的Proxy模式,其類結(jié)構(gòu)如圖5-2所示:

圖5-2 Proxy模式

  參照數(shù)據(jù)訪問層的設(shè)計方法,我們可以為領(lǐng)域?qū)ο蠹按韺ο蠼⒊橄蠊S,并在web.config中配置相關(guān)的配置節(jié),然后利用反射技術(shù)創(chuàng)建具體的對象實例。如此一來,表示層就可以僅僅依賴PetShop.IBLL程序集以及工廠模塊,如此就可以解除表示層與具體領(lǐng)域?qū)ο笾g的依賴關(guān)系。表示層與修改后的業(yè)務(wù)邏輯層的關(guān)系如圖5-3所示:

圖5-3 修改后的業(yè)務(wù)邏輯層與表示層的關(guān)系

圖5-4則是PetShop 4.0原有設(shè)計的層次關(guān)系圖:

圖5-4 PetShop 4.0中表示層與業(yè)務(wù)邏輯層的關(guān)系

  通過比較圖5-3與圖5-4,雖然后者不管是模塊的個數(shù),還是模塊之間的關(guān)系,都相對更加簡單,然而Web Component組件與業(yè)務(wù)邏輯層之間卻是強耦合的,這樣的設(shè)計不利于應(yīng)對業(yè)務(wù)擴展與需求變更。通過引入接口模塊IBLL與工廠模塊BLLFactory,解除了與具體模塊BLL的依賴關(guān)系。這種設(shè)計對于業(yè)務(wù)邏輯相對比較復(fù)雜的系統(tǒng)而言,更符合面向?qū)ο蟮脑O(shè)計思想,有利于我們建立可抽取、可替換的“抽屜”式三層架構(gòu)。


以上就是PetShop的業(yè)務(wù)邏輯層設(shè)計全部內(nèi)容,希望能給大家一個參考,也希望大家多多支持腳本之家。

您可能感興趣的文章:
  • 學(xué)會sql數(shù)據(jù)庫關(guān)系圖(Petshop)
  • 《解剖PetShop》之一:PetShop的系統(tǒng)架構(gòu)設(shè)計
  • 《解剖PetShop》之二:PetShop數(shù)據(jù)訪問層數(shù)之據(jù)庫訪問設(shè)計
  • 《解剖PetShop》之三:PetShop數(shù)據(jù)訪問層之消息處理
  • 《解剖PetShop》之四:PetShop之ASP.NET緩存
  • 《解剖PetShop》之六:PetShop之表示層設(shè)計

標簽:聊城 清遠 甘肅 海西 慶陽 中衛(wèi) 臨夏

巨人網(wǎng)絡(luò)通訊聲明:本文標題《《解剖PetShop》之五:PetShop之業(yè)務(wù)邏輯層設(shè)計》,本文關(guān)鍵詞  解剖PetShop,之五,PetShop,之,;如發(fā)現(xiàn)本文內(nèi)容存在版權(quán)問題,煩請?zhí)峁┫嚓P(guān)信息告之我們,我們將及時溝通與處理。本站內(nèi)容系統(tǒng)采集于網(wǎng)絡(luò),涉及言論、版權(quán)與本站無關(guān)。
  • 相關(guān)文章
  • 下面列出與本文章《《解剖PetShop》之五:PetShop之業(yè)務(wù)邏輯層設(shè)計》相關(guān)的同類信息!
  • 本頁收集關(guān)于《解剖PetShop》之五:PetShop之業(yè)務(wù)邏輯層設(shè)計的相關(guān)信息資訊供網(wǎng)民參考!
  • 推薦文章
    主站蜘蛛池模板: 龙口泰进机械有限公司| 常矿起重机械有限公司| 新麦机械 无锡 有限公司| 机械化工程有限公司| 宏源机械设备有限公司| 无锡森本精密机械有限公司| 厦门 机械有限公司| 山东闽源钢铁有限公司| 海华机械制造有限公司| 天津润澍机械有限公司| 上海信烨精密机械有限公司| 盐城机械设备有限公司| 新乡矿山起重机有限公司| 浙江富昌机械有限公司| 常州达德机械有限公司| 江阴惠尔信机械有限公司| 广州市机械有限公司| 纽科伦起重机有限公司| 孝感金达钢铁有限公司| 温州正展机械有限公司| 广州冠浩机械设备有限公司| 常州斯塔克机械设备有限公司| 昆山工业机械有限公司| 镇江机械设备有限公司| 上海龙工机械有限公司| 宣威凤凰钢铁有限公司| 江阴华东机械有限公司| 广东日钢机械有限公司| 上海国青机械有限公司| 湘元三一机械有限公司| 青岛慧洋梳理机械有限公司| 新乡市福泽机械设备有限公司| 张家港海狮洗涤机械有限公司| 河北金维重工有限公司| 青岛青科重工有限公司| 温岭永进机械有限公司| 天津泰威机械有限公司| 杭州金鸥机械有限公司| 杭州萧山凯兴食品机械有限公司| 有限公司名字起名大全| 青岛 塑料机械有限公司| 苏州英维特精密机械有限公司| 裕民机械工业有限公司| 广州大圆机械设备有限公司| 德州联合石油机械有限公司| 镇江宏泰钢铁有限公司| 深圳步先包装机械有限公司| 郑州龙阳重型机械设备有限公司 | 郑州富民机械有限公司| 柳州市超凌顺机械制造有限公司 | 江苏合丰机械制造有限公司| 国研机械设备有限公司| 浙江帅锋精密机械制造有限公司| 深圳中施机械设备有限公司 | 江苏长强钢铁有限公司| 山东宇龙机械有限公司| 新乡市先锋振动机械有限公司| 晋城福盛钢铁有限公司| 江苏科力机械有限公司| 南方力劲机械有限公司| 鸡西煤矿机械有限公司| 十堰福堰钢铁有限公司| 泰安市民乐机械制造有限公司| 宁波利豪机械有限公司| 龙工机械制造有限公司| 大连橡塑机械有限公司| 无锡盛达机械制造有限公司| 宁波安德机械有限公司| 浙江荣升机械有限公司| 济南卓恒膨化机械有限公司| 常州好迪机械有限公司| 常州国丰机械有限公司| 无锡新麦机械有限公司| 机械有限公司 机械手| 苏州升降机械有限公司| 苏州毕特富精密机械有限公司 | 永盛机械设备有限公司| 河南省平原矿山机械有限公司| 鹰普机械宜兴有限公司| 张家港精密机械有限公司| 密机械(西安)有限公司| 河南通达重工有限公司| 广州市台展机械有限公司| 广西玉柴动力机械有限公司| 广东机械制造有限公司| 廊坊包装机械有限公司| 梧州沃华机械有限公司| 抚顺中兴重工有限公司| 昆山锦沪机械有限公司| 德州锦冠钢铁有限公司| 佛山市明宏机械设备有限公司| 天津敏信机械有限公司| 湖南工程机械有限公司| 芜湖良仕机械有限公司| 常熟通江机械有限公司| 龙口中宇机械有限公司| 上海好机械有限公司| 常州朝康机械有限公司| 上海优拜机械有限公司| 安徽富鑫钢铁有限公司| 上海信机械有限公司| 山东凯达起重机械有限公司 | 青岛金越隆机械有限公司| 江苏科力机械有限公司| 成都工程机械有限公司| 江西平起实业有限公司| 日照立盈机械有限公司| 广东力源液压机械有限公司| 临沂工程机械有限公司| 常州万高机械制造有限公司| 上海重工机械有限公司| 上海 印刷机械有限公司| 东莞市金峥机械有限公司| 广州市天烨食品机械有限公司 | 新乡市西贝机械有限公司| 山东逸通机械有限公司| 山东龙腾机械有限公司| 建设工程有限公司起名| 江苏迈安德食品机械有限公司| 富世华全能常州机械有限公司| 河北清大环保机械有限公司 | 大连科信机械有限公司| 常州市永明机械制造有限公司| 临沂金立机械有限公司| 东莞三机械有限公司| 杭州高福机械制造有限公司| 东莞东久机械有限公司| 上海好机械有限公司| 上海捷如重工机电设备有限公司| 上海凯奇机械设备有限公司| 江阴兴澄特种钢铁有限公司| 常州艾隆精密机械有限公司| 浙江机械制造有限公司| 工程机械有限公司取名| 东莞东久机械有限公司| 机械化工程有限公司| 常州市豪乐机械有限公司| 常州制药机械有限公司| 福建 机械有限公司| 深圳市德润机械有限公司| 南京高立工程机械有限公司| 吉林省起点医药有限公司| 天马电子机械有限公司| 华瑞丰机械有限公司| 郑州市同鼎机械设备有限公司| 江苏如皋钢铁有限公司| 苏州传动机械有限公司| 上海德托机械有限公司| 靖江市机械制造有限公司| 江苏宏达起重电机有限公司| 苏州市机械制造有限公司| 安徽泰恒机械制造有限公司| 北京石油机械有限公司| 上海光华印刷机械有限公司| 哈尔滨机械制造有限公司| 青岛德固特机械制造有限公司| 天津艾尔特精密机械有限公司| 上海起华机械有限公司| 瑞安 包装机械有限公司| 杭州金狮机械有限公司| 广州市机械有限公司| 常州远见机械有限公司| 飞虎机械制造有限公司| 朝阳宏达机械有限公司| 常州坤世精密机械有限公司| 北京永创通达机械设备有限公司 | 上海胜松机械制造有限公司 | 衢州 机械有限公司| 康纳机械制造有限公司| 大连宏大连杆机械制造有限公司 | 珠海市广浩捷精密机械有限公司| 佛山市南海鼎工包装机械有限公司 | 重庆力波机械有限公司| 无锡中机械有限公司| 华亿机械制造有限公司| 浙江起重机械有限公司| 上海凡贝机械有限公司| 旭英机械有限公司招聘| 江苏省南扬机械制造有限公司 | 襄阳东昇机械有限公司| 淮安天宇机械有限公司| 南京包装机械有限公司| 山东翔工机械有限公司| 常州汉森机械有限公司| 山东同力达智能机械有限公司 | 恒丰机械配件有限公司| 天津市液压机械有限公司| 青岛仕诚塑料机械有限公司| 上海沃勒起重设备有限公司 | 上海江南制药机械有限公司| 徐州天立机械有限公司| 无锡布勒机械制造有限公司招聘| 吉林鑫达钢铁有限公司| 东莞瑞辉机械有限公司| 上海凯机械有限公司| 大连意美机械有限公司| 深圳步先包装机械有限公司| 成都海科机械设备制造有限公司 | 常州浦发机械有限公司| 扬州正大机械有限公司| 辽阳喜旺机械制造有限公司| 苏州海骏自动化机械有限公司| 如皋市通达机械制造有限公司| 上海泽泽机械有限公司| 常州包装机械有限公司| 江苏佳粮机械有限公司| 重庆驰骋机械有限公司| 济宁鑫宏工矿机械设备有限公司 | 泉州市劲力工程机械有限公司| 世创机械制造有限公司| 青岛恒林机械有限公司| 江苏中闽钢铁有限公司| 广州新浪爱拓化工机械有限公司| 佛山陶瓷机械有限公司| 浙江鼎业机械设备有限公司| 广州盛广誉机械设备有限公司 | 苏州阔泽精密机械有限公司| 嵊州市机械有限公司| 青岛新型建设机械有限公司| 永明机械制造有限公司| 浙江盾安机械有限公司| 河南黎明路桥重工有限公司| 台州通宇变速机械有限公司| 常州新燎原机械有限公司| 山东凯达起重机械有限公司 | 浙江赛力机械有限公司| 上海神农机械有限公司| 上海星申机械有限公司| 佛山市松可包装机械有限公司| 陕西至信机械制造有限公司怎么样 | 江阴江顺精密机械零部件有限公司| 山东泰山机械有限公司| 河北安丰钢铁有限公司| 江苏宏程重工有限公司| 上海合劲传动机械有限公司| 唐山经安钢铁有限公司| 宁波将军机械有限公司| 南京斯坦福机械有限公司| 江阴西城钢铁有限公司| 盘江矿山机械有限公司| 江苏江海机械有限公司| 山西亚新钢铁有限公司| 青岛希世可机械有限公司| 长城重工机械有限公司| 江苏申特钢铁有限公司| 夹江水工机械有限公司| 河北航天振邦精密机械有限公司 | 潍坊爱地植保机械有限公司| 唐山众达机械轧辊有限公司| 韶关核力重工机械有限公司| 重庆明鑫机械有限公司| 盐城联鑫钢铁有限公司| 广东华鼎机械有限公司| 南通江华机械有限公司| 济宁四通工程机械有限公司| 三川德青工程机械有限公司| 济南包装机械械有限公司| 江苏鑫锋重工机床有限公司| 东莞市工业机械有限公司| 江苏化工机械有限公司| 东莞%机械制造有限公司| 盐城 机械有限公司| 石家庄 机械有限公司| 广州工友起重设备制造有限公司| 常州科尧机械有限公司| 江苏华夏重工有限公司| 广州金宗机械有限公司| 湖北机械设备有限公司| 临沂工程机械有限公司| 中阳钢铁有限公司官网| 东莞市亿德机械设备有限公司| 新麦机械有限公司官网| 海宁美惠机械有限公司| 上海陵城机械有限公司| 贵州凯星液力传动机械有限公司| 扬州涂装机械有限公司| 上海行雄机械有限公司| 上海松仕机械设备有限公司| 徐州利国钢铁有限公司| 晋江海纳机械有限公司| 陕西 机械 有限公司| 常州起重机械有限公司| 扬州伏尔坎机械制造有限公司| 凯斯纽荷兰机械 哈尔滨 有限公司| 勤堡精密机械有限公司| 纽科伦新乡起重机有限公司| 机械自动化有限公司| 上海纳丰机械设备有限公司| 山东利丰机械有限公司| 厦门银华机械有限公司| 郑州年旭机械有限公司| 山东欧劲工程机械有限公司| 扬州禹笑水利机械有限公司 | 杭州萧山机械有限公司| 宁波海伯精密机械制造有限公司 | 江苏利淮钢铁有限公司| 河南泰兴粮油机械设备有限公司| 杭州丽伟电脑机械有限公司| 广东新船重工有限公司| 佛山市陶瓷机械有限公司| 东莞市联顺机械有限公司| 锋劲威机械有限公司| 江苏沃元精密机械有限公司 | 安徽格瑞德机械制造有限公司 | 北京复盛机械有限公司| 韶瑞重工有限公司招聘| 佛山市宝陶机械设备有限公司| 唐山宏润钢铁有限公司| 东莞市泽冠机械有限公司| 天烨机械工程有限公司| 杭州双利机械有限公司| 广州市通风机械设备有限公司 | 宁波博纳机械有限公司| 道依茨法尔机械有限公司| 宁波 机械 有限公司| 南通福斯特机械制造有限公司| 柳州丹顺机械有限公司| 芜湖仅一机械有限公司| 天津起重机械有限公司| 上海翊特机械有限公司| 起重机械设备有限公司| 江苏腾通包装机械有限公司| 浙江荣亿精密机械有限公司| 苏州博扬机械有限公司| 龙海起重工具有限公司| 德清章盟机械设备有限公司| 唐山松汀钢铁有限公司| 上海敏杰机械有限公司| 石家庄煤矿机械有限公司| 苏州阔泽精密机械有限公司| 力迈机械设备有限公司| 机械设备出口有限公司| 上海全众机械有限公司| 江苏 机械有限公司| 广东美特机械有限公司| 新乡市新久振动机械有限公司| 万兹莱压缩机械(上海)有限公司| 无锡六叶机械有限公司| 南京苏荣机械有限公司| 常州华德机械有限公司| 江苏同正机械制造有限公司| 福建新源重工有限公司| 大连日立机械设备有限公司| 合肥二宫机械有限公司| 江苏天泽精工机械有限公司| 梁发记机械有限公司| 重庆 机械有限公司| 烟台东恒机械有限公司| 京山 机械有限公司| 迪砂常州机械有限公司| 科尼起重机设备(上海)有限公司| 郑州中嘉重工有限公司| 商丘 机械设备有限公司| 林氏玻璃机械有限公司| 起重设备(上海)有限公司| 山东华准机械有限公司| 机械(无锡)有限公司| 单县江华机械有限公司| 临西中伟机械有限公司| 中科包装机械有限公司| 合肥至信机械有限公司| 安庆市机械有限公司| 鞍山源鑫钢铁有限公司| 重庆辉昌机械设备有限公司 | 沈阳透平机械有限公司| 华东油压机械制造有限公司 | 宣城市 机械 有限公司| 沈阳东荣机械有限公司| 无锡布勒机械制造有限公司招聘| 克朗斯机械有限公司| 徐州丰展机械有限公司| 昆山环保机械有限公司| 无锡诺亚机械有限公司| 机械有限公司 法兰| 人科机械设备有限公司| 苏州牧天动力机械有限公司 | 山东华雄机械有限公司| 烟台安信精密机械有限公司| 兰州机械设备有限公司| 昆山博通机械设备有限公司| 山东亚泰机械有限公司| 衡阳华意机械有限公司| 山东凯达起重机械有限公司| 上海善佳机械设备有限公司| 宁波联成机械有限公司| 大禾众邦机械有限公司| 武汉鑫巨力精密机械制造有限公司 | 抚顺中兴重工有限公司| 秦皇岛 机械设备有限公司| 山推抚起机械有限公司| 广州市台展机械有限公司| 宁波钢铁有限公司电话| 新乐华宝塑料机械有限公司| 西安金力特机械设备有限公司| 江苏冶金机械有限公司| 成都神钢建设机械有限公司| 安徽金庆龙机械制造有限公司| 固尔琦包装机械有限公司| 山东硕诚机械有限公司| 天赛塑胶机械有限公司| 苏州凯威塑料机械有限公司| 山东液压机械有限公司| 莱钢永锋钢铁有限公司| 丰凯机械制造有限公司| 东莞市金拓机械有限公司| 江苏久盛机械设备有限公司| 宁波市北仑机械制造有限公司 | 佛山建邦机械有限公司| 广州而众机械有限公司| 杭州汽轮机械设备有限公司| 冷水江钢铁有限公司| 上海众星洗涤机械制造有限公司| 西安市机械有限公司| 山东旭升机械有限公司| 山东建凌机械有限公司| 山东 机械制造有限公司| 福建群峰机械有限公司| 中科包装机械有限公司| 厦门洪海机械有限公司| 南通龙威机械有限公司| 苏州雁达机械有限公司| 浙江弘润机械制造有限公司 | 山东建昌机械有限公司| 铁岭圣添机械有限公司| 青岛鲁耕农业机械有限公司| 上海烨昌食品机械有限公司| 河南小松工程机械有限公司| 湖南金峰机械有限公司| 天津英德诺机械设备有限公司| 宿迁 机械 有限公司| 三明 机械有限公司| 无锡包装机械有限公司| 德瑞机械设备有限公司| 广州机械有限公司 v| 山东银鹰炊事机械有限公司| 曲阜市机械有限公司| 庆达机械制造有限公司| 钢铁国际贸易有限公司| 山东钢铁日照钢铁有限公司| 浙江建设机械有限公司| 萍乡萍钢安源钢铁有限公司 | 江阴市江顺机械有限公司| 东莞机械设备有限公司| 黄山三佳谊华精密机械有限公司| 济南金胜星机械设备有限公司| 马钢合肥钢铁有限公司| 杭州机械设备有限公司| 山东永锋钢铁有限公司| 广东省重工建筑设计院有限公司| 青岛德利机械有限公司| 上海起发实验试剂有限公司| 山东临工机械有限公司| 凯达机械制造有限公司| 机械成套设备有限公司| 乐清市锐成机械有限公司| 广州闽欣机械设备有限公司| 湖北铁正机械有限公司| 河北实阳机械有限公司| 苏州同鑫鸿精密机械有限公司 | 中煤盘江重工有限公司| 烟台金鹏矿业机械有限公司| 机械电子制造有限公司| 南通 机械有限公司| 烟台市利达木工机械有限公司| 上海荣沃机械有限公司| 广西金达机械有限公司| 广州卓远机械有限公司| 江苏古川机械有限公司| 矿山起重机有限公司| 盐城石油机械有限公司| 博山华翔机械制造有限公司| 福州优利机械有限公司| 唐山安丰钢铁有限公司| 武汉格瑞拓机械有限公司| 芜湖电工机械有限公司| 山西中升钢铁有限公司| 南阳市 机械有限公司| 武汉市快诚机械有限公司| 南京阿特拉斯机械设备有限公司| 上海嘉倍德塑胶机械有限公司 | 宝钢盐城钢铁有限公司| 常州杭钢卓信机械装备有限公司 | 机械(无锡)有限公司| 山东九环石油机械有限公司 | 昆明 机械制造 有限公司| 江苏正合重工有限公司| 温岭联星机械有限公司| 杭州三瑞机械有限公司| 济南金胜星机械设备有限公司| 济南章力机械有限公司| 重庆机械设备有限公司| 上海东泷重型机械有限公司| 阿特拉斯工程机械有限公司| 业精机械制造有限公司| 山东山建机械有限公司| 青岛包装机械有限公司| 爱立许机械有限公司| 佐竹机械苏州有限公司| 淄博捷达机械有限公司| 连云港机械制造有限公司| 东莞市纳金机械有限公司| 苏州通润机械铸造有限公司| 源田床具机械有限公司| 杭州液压机械有限公司| 武汉市快诚机械有限公司| 浙江精劲机械有限公司| 中联恒通机械有限公司| 江阴市豪亚机械制造有限公司| 杭州诺迈机械有限公司| 天津德尚机械有限公司| 江苏贝尔机械有限公司| 武汉餐至饮机械设备有限公司| 三技精密机械有限公司| 浙江华昌液压机械有限公司| 东莞市利成机械有限公司| 浙江顺得机械有限公司| 江苏普格机械有限公司| 柳州恒瑞机械有限公司| 唐山机械设备有限公司| 宁波环海重工有限公司| 湖州机械制造有限公司| 常州儒邦机械有限公司| 科达机械制造有限公司| 宜兴机械设备有限公司| 南京腾阳机械有限公司| 洛阳中收机械装备有限公司| 山东领品机械有限公司| 南京伟舜机械有限公司| 河北华西钢铁有限公司| 上海海邦机械设备制造有限公司| 长葛鑫鑫机械有限公司| 中信重工开诚智能装备有限公司| 山矿机械设备有限公司| 沈阳 机械 有限公司| 北京现代京城工程机械有限公司| 威海华东重工有限公司| 山东泰安煤矿机械有限公司| 河北春耕机械制造有限公司| 浙江立洋机械有限公司| 河北东方德源机械制造有限公司| 合肥海源机械有限公司| 朝阳重工机械有限公司| 新乡矿山起重机有限公司| 南通中船机械制造有限公司| 嘉兴敏实机械有限公司| 扬州文轩钢铁有限公司| 江苏青山机械有限公司| 山西 机械有限公司| 海盛精密机械有限公司| 扬州市机械制造有限公司| 安徽大洋机械有限公司| 焦作机械制造有限公司| 浙江建机起重机械有限公司 | 恩德特机械(苏州)有限公司| 重庆宝汇跨搏机械制造有限公司| 唐盛国际机械有限公司| 中车南口机械有限公司| 上海臣轩机械有限公司| 长沙威沃机械制造有限公司| 湖北大展钢铁有限公司| 深圳市康铖机械设备有限公司| 郑州矿山机械有限公司| 杭州红磊机械有限公司| 合肥工程机械有限公司| 上海食品机械有限公司| 广西美鹏机械设备有限公司| 富华重工有限公司老板| 洛阳震动机械有限公司| 青岛永强木工机械有限公司| 广州众起办公用品有限公司| 宜昌 机械设备有限公司| 西子重工机械有限公司| 上海乾享机械设备有限公司| 上海中远海运重工有限公司| 浙江金辉机械有限公司| 安徽省中冶重工机械有限公司| 华电重工机械有限公司| 杭州宏展机械有限公司| 武汉钢铁有限公司疫情| 鑫锐机械设备有限公司| 河北坤达起重设备有限公司| 江宏机械制造有限公司| 兰州兰石重工有限公司| 永华机械有限公司招聘| 中山市凌宇机械有限公司| 天津国际机械阀门有限公司| 广州伟乐机械设备有限公司| 无锡建仪仪器机械有限公司| 河南丰泉机械有限公司| 张家港市通惠化工机械有限公司 | 苏州威邦自动化机械有限公司 | 中阳钢铁有限公司官网| 沈阳六和机械有限公司| 郑州双合机械有限公司| 起步有限公司上市排名| 中核机械工程有限公司| 昆山大风机械有限公司| 杭州天杨机械有限公司| 扬州 机械设备 有限公司| 无锡新麦机械有限公司| 杭州雅顿过滤机械有限公司| 西安 机械设备有限公司| 青岛美光机械有限公司| 南通国盛精密机械有限公司| 常州市豪乐机械有限公司| 上海成套机械有限公司| 济南聚鑫机械有限公司| 青岛隆硕农牧机械制造有限公司| 佛山市玻璃机械有限公司| 山东联邦重工有限公司| 粮油机械设备有限公司| 郑州华隆机械有限公司| 东莞市欧西曼机械设备有限公司 | 上海沁艾机械设备有限公司| 昆山海进机械有限公司| 东莞市森佳机械有限公司| 业精机械制造有限公司| 重庆海松机械有限公司| 东莞市恒生机械制造有限公司| 成都 机械 有限公司| 东莞市纳金机械有限公司 | 鼎盛机械设备有限公司| 沈阳西城钢铁有限公司| 成都杰瑞达工程机械有限公司| 无锡中机械有限公司| 贵州凯星液力传动机械有限公司| 上海杉野机械有限公司| 东莞市通盛机械有限公司| 汶瑞机械山东有限公司| 机械有限公司 英文| 成都大华路面机械有限公司| 兰州长征机械有限公司| 河南江河机械有限公司| 山东建凌机械有限公司| 哈克农业机械装备制造有限公司| 湖北 机械 有限公司| 昆明机械制造有限公司| 河北冠能石油机械制造有限公司 | 桂林矿山机械有限公司| 临沂华星机械有限公司| 温州惠利机械有限公司| 上海轩世机械有限公司| 广西玉柴动力机械有限公司| 德龙钢铁有限公司招聘| 青岛浩翔机械有限公司| 新乡黄氏食品机械有限公司| 佰源机械有限公司欠款| 宁波固奇包装机械制造有限公司| 天津 机械有限公司| 宜兴市机械有限公司| 上海精密机械制造有限公司| 东莞木工机械有限公司| 镇田机械平湖有限公司| 威海石岛重工有限公司| 福建东亚机械有限公司| 南京瑞亚挤出机械制造有限公司 | 青岛 木工机械有限公司| 瑞特精密机械有限公司| 三明机械制造有限公司| 江苏冶金机械有限公司| 南京机械设备制造有限公司| 昆荣机械(昆山)有限公司| 张家港市饮料机械有限公司| 嘉兴精密机械有限公司| 张家口机械有限公司| 山东数控机械有限公司| 上海自动化机械有限公司| 张家港市塑机械有限公司| 江源机械制造有限公司| 青岛精密机械有限公司| 宁波必沃纺织机械有限公司 | 化工有限公司起名大全| 青县冀丰钢铁有限公司| 十堰福堰钢铁有限公司| 杭州方圆塑料机械有限公司| 河北曙光机械有限公司| 苏州金纬机械制造有限公司| 无锡建筑机械有限公司| 临海市机械有限公司| 苏州苏鹰机械制造有限公司| 浙江诚泰化工机械有限公司| 连云港亚新钢铁有限公司| 兰州 机械 有限公司| 深圳恒盛力包装机械有限公司| 佳铭机械有限公司骗局| 迈安德食品机械有限公司| 浙江九隆机械有限公司| 苏州传动机械有限公司| 徐工机械有限公司现状| 亨沃机械设备有限公司| 北京城建重工有限公司| 山东纺织机械有限公司| 常州市锦益机械有限公司| 中山凌宇机械有限公司| 启益电器机械有限公司| 上海传动机械有限公司| 广州广重分离机械有限公司| 硕方精密机械有限公司| 济宁山矿机械有限公司| 湖南龙凤机械制造有限公司| 曲阜润丰机械有限公司| 山东临沂机械有限公司| 上海乾享机械设备有限公司| 厦门大禾机械有限公司| 郑州重型机械有限公司| 佛山市优霸机械设备有限公司| 温州惠利机械有限公司| 宜兴机械设备有限公司| 宁波顺兴机械制造有限公司| 临沂江鑫钢铁有限公司| 太原市 机械有限公司| 青岛云龙纺织机械有限公司| 合肥亿恒机械有限公司| 机械有限公司 英文| 佛山突破机械有限公司| 北京石油机械有限公司| 湖北昌胜机械设备制造有限公司 | 浙江麒龙起重机械有限公司| 河南发达起重机有限公司| 德国机械制造有限公司| 淮安天宇机械有限公司| 鑫源机械设备有限公司| 上海行雄机械有限公司| 杭州千和精密机械有限公司| 兖矿东华重工有限公司| 信阳众泰机械设备有限公司| 四川阳光机械有限公司| 伟业机械制造有限公司| 广东华三行工程机械有限公司| 浙江机械设备制造有限公司| 河南耿力支护机械设备有限公司 | 东莞市亿德机械设备有限公司| 济宁矿山机械有限公司| 长沙市机械有限公司| 广东思沃精密机械有限公司| 苏州勤美达精密机械有限公司| 济南迅捷机械设备有限公司| 苏州海骏自动化机械有限公司| 天津市天机液压机械有限公司 | 青岛德盛机械制造有限公司| 上海胡鑫机械有限公司| 浙江锦峰纺织机械有限公司 | 杭州丰波机械有限公司| 事必得精密机械有限公司| 上海机械刀片有限公司| 温州海翔机械有限公司| 山东矿山机械 有限公司| 诸城市中天机械有限公司| 新疆昆仑钢铁有限公司| 深圳旭生机械有限公司| 重的机械有限公司招聘| 安徽泰源工程机械有限公司| 兰州机械设备有限公司| 杭州定江机械有限公司| 广州市包装机械有限公司| 福州闽台机械有限公司| 芜湖科翔动力机械有限公司 | 青岛科尼乐机械设备有限公司| 工程机械有限公司经营范围| 嘉善精密机械有限公司| 张家口煤矿机械制造有限公司 | 三川德青工程机械有限公司| 广州市 工程机械有限公司| 无锡通用机械厂有限公司| 天津石油机械有限公司| 卡麦龙机械有限公司| 中阳钢铁有限公司官网| 沈阳华扬机械有限公司| 瑞迪机械实业有限公司| 佛山市钢铁有限公司| 苏州科瑞机械有限公司| 新疆丰泰钢铁有限公司| 牡丹江机械有限公司| 上海震伦机械有限公司| 诸城市铭威食品机械有限公司| 杭州康发塑料机械有限公司| 绵阳科睿机械有限公司| 上海 包装机械有限公司| 张家港市机械有限公司| 盐城三益石化机械有限公司 | 恒昌机械制造有限公司| 固安嘉峰机械有限公司| 中山 机械 有限公司| 浙江飞挺机械有限公司| 无锡创能机械制造有限公司| 龙文机械设备有限公司| 江苏海特尔机械有限公司| 嘉泰数控机械有限公司| 河南德润钢铁有限公司| 新疆机械设备有限公司| 德州锦冠钢铁有限公司| 湖南中联陶瓷机械有限公司| 长沙晶锐机械有限公司| 新疆昆玉钢铁有限公司| 福建巨邦机械有限公司| 昆山施耐特机械有限公司| 武汉钢铁有限公司疫情| 柳工常州机械有限公司| 温州佳诚机械有限公司| 大连龙尧塑料机械有限公司 | 美卓造纸机械有限公司| 上海二和机械有限公司| 青岛凯顿机械有限公司| 普特工程机械有限公司| 昆山塑料机械有限公司| 扬州恒润钢铁有限公司| 上海春田机械有限公司| 沈阳六合机械有限公司| 河南明天机械有限公司| 德马格起重机械有限公司| 江阴凯澄起重机械有限公司| 上海颖盛机械有限公司| 湖南天拓重工有限公司| 邹平 机械有限公司| 海狮洗涤机械有限公司| 合肥锦利丰机械有限公司| 新源重工机械有限公司| 史陶比尔精密机械电子有限公司 | 重庆地泽机械有限公司| 常州铭盈包装机械有限公司| 重庆自动化机械有限公司| 上海景林包装机械有限公司| 山东大启机械有限公司| 万金机械配件有限公司| 上海乾享机械设备有限公司| 无锡市巨神起重机有限公司| 合肥机械设备有限公司| 中信重工开诚智能装备有限公司| 浙江欧森机械有限公司| 丰凯机械制造有限公司| 长兴军毅机械有限公司| 徐州迈特机械有限公司| 上海力净洗涤机械制造有限公司| 广东马氏机械有限公司| 重庆海迅机械制造有限公司 | 重庆卡滨通用机械有限公司| 上海盟申机械设备有限公司| 泰上机械设备有限公司| 安徽大洋机械有限公司| 武汉环卫机械有限公司| 广东重工建设监理有限公司怎么样| 上海理贝包装机械有限公司| 东莞机械设备制造有限公司 | 常州南鹏机械有限公司| 上海巨远塑料机械有限公司| 旭众食品机械有限公司| 鼎业机械设备有限公司| 东莞志成机械有限公司| 杭州星宏机械有限公司| 淄博机械制造有限公司| 河北圣禹水工机械有限公司| 浙江君鸿机械有限公司| 宁波美宁机械有限公司| 朝阳重工机械有限公司| 常州市新武机械有限公司| 青岛金越隆机械有限公司| 大京机械山东有限公司| 杭州胜驰机械有限公司| 上海 食品机械有限公司| 上海应晓食品机械有限公司| 济宁福瑞得机械有限公司| 溧阳市机械有限公司| 济宁机械设备有限公司| 浙江鼎力机械有限公司| 诸城市天顺机械有限公司| 郑州龙阳重型机械设备有限公司| 机械租赁有限公司名字| 河北正大机械有限公司| 武汉苏源机械设备租赁有限公司| 上海冉本机械制造有限公司| 枣庄金正钢铁有限公司| 新金山钢铁有限公司| 无锡鹰贝机械有限公司| 天津轧三钢铁有限公司| 重庆箭驰机械有限公司| 徐州二川机械有限公司| 潍坊川泰机械有限公司| 首都航天机械有限公司| 天津市钢铁贸易有限公司| 同安木工机械有限公司| 上海得力起重索具有限公司| 上海烨昌食品机械有限公司| 高臻机械机械有限公司| 潍坊永成机械有限公司| 北京航天振邦精密机械有限公司| 浙江卓驰机械有限公司| 吉林鑫达钢铁有限公司| 濮阳 机械有限公司| 石嘴山钢铁有限公司| 佳铭机械有限公司骗局| 西安海焱机械有限公司| 东莞麒麟机械有限公司| 宁波环海重工有限公司| 江苏中热机械设备有限公司| 上海制药机械有限公司| 佛山市三良机械设备有限公司 | 济南数控机械有限公司| 大连滨海起重机吊具有限公司| 苏州友众传动机械有限公司| 嘉兴扬鑫机械有限公司| 青岛万邦包装机械有限公司 | 浙江汉达机械有限公司| 上海又高机械有限公司| 洛阳中收机械装备有限公司招聘| 佛山市松可包装机械有限公司| 丽驰精密机械有限公司| 安徽建筑机械有限公司| 无锡中机械有限公司| 南京阿特拉斯机械设备有限公司| 四川德盛钢铁有限公司| 中海福陆重工有限公司招聘| 宏鑫机械设备有限公司| 鹤壁市豫星机械制造有限公司 | 浙江永达输送机械设备有限公司| 亨沃机械设备有限公司| 麻阳金湘钢铁有限公司| 营口京华钢铁有限公司| 玛狮工程机械有限公司| 宁波昌源机械有限公司| 常州 机械 有限公司| 建材机械制造有限公司| 光华机械制造有限公司| 大连龙尧塑料机械有限公司| 科华机械制造有限公司| 江西省机械有限公司| 杭州建泰机械有限公司| 日照瑞荣机械有限公司| 沈阳重型机械有限公司| 常州万裕机械有限公司| 济南岳峰机械有限公司| 青州包装机械有限公司| 青州市拓新机械设备有限公司| 无锡双麦机械有限公司| 滨州 机械 有限公司| 眉山千层弹花机械有限公司| 山西中阳钢铁有限公司| 诸城市宏宇轻机机械有限公司| 东莞市金拓机械有限公司| 山东翔工机械有限公司| 台州市路桥奇勇农业机械有限公司| 威海泓意机械有限公司| 市瑞港机械有限公司| 昆山鑫建诚机械设备有限公司| 山东锦坤机械有限公司| 东泰机械制造有限公司| 唐山市德龙钢铁有限公司| 广州力净洗涤机械有限公司| 建湖液压机械有限公司| 固安嘉峰机械有限公司| 浙江大鹏机械有限公司| 上海皆力机械设备有限公司| 临沂铸信机械有限公司| 大连 重工有限公司| 安溪永兴机械有限公司| 佛山市玻璃机械有限公司| 浙江濠泰机械有限公司| 张家口煤矿机械有限公司| 宝鸡万工机械制造有限公司| 广东美特机械有限公司| 深圳龙润彩印机械设备有限公司| 江苏舜工机械有限公司| 青岛安成食品机械有限公司| 嘉厨食品机械有限公司| 台湾正河源机械配件有限公司| 佛山机械制造有限公司| 成都杰瑞达工程机械有限公司 | 河北小松工程机械贸易有限公司| 洛北重工机械有限公司| 邢工机械制造有限公司| 临海正大机械有限公司| 慈溪 机械 有限公司| 宁波瑞铭机械有限公司| 嘉兴 机械有限公司| 平湖英厚机械有限公司| 浙江安奇迪动力机械有限公司| 淮安液压机械有限公司| 兰州华诚石化机械制造有限公司| 徐州七星机械有限公司| 郑州祥龙建筑机械租赁有限公司 | 上海机械施工有限公司| 北京大森长空包装机械有限公司 | 青州市拓新机械设备有限公司| 上海七洋液压机械有限公司| 中山凌宇机械有限公司| 佛山隆机械有限公司| 广西清隆机械制造有限公司| 中山松德印刷机械有限公司| 浙江九隆机械有限公司| 郑州大华矿山机械有限公司| 东莞市雅康精密机械有限公司| 山东宏鑫机械有限公司| 上海钢铁贸易有限公司| 新晨动力机械有限公司| 上海永策机械设备有限公司| 新疆机械设备有限公司| 山东兴华机械有限公司| 诸城盛和机械有限公司| 瑞安瑞泰机械有限公司| 遂宁华能机械有限公司|