2012-02-06 65 views
2

我有MasterData類,其實例包含有關所有可能的小工具的一般信息。在兩個數據集之間放置創建地圖的規則的位置?

我有另一個類CustomerData其實例包括:

  • 對這些小工具的一個子集的某些特定信息,如由客戶提供的
  • 從每個小工具相同的小工具MasterData鏈接

CustomerData構造函數採用的參數:

  • 由客戶提供的文件
  • 一個Python模塊,我寫了一個包含有關客戶文件的各種細節,在模塊級變量的形式,每個客戶;例如它說明哪個客戶字段包含產品標識符;等等。

鏈接就像從客戶文件中獲取適當的ID並在主數據的相應字段中查找一樣簡單。在客戶模塊中提供了包含相關ID(客戶和主人)的字段的名稱等等。實際鏈接在CustomerData構造函數中執行。直到我們用新的來了,要複雜得多,匹配規則

,一切運行良好。每個匹配規則只適用於特定的客戶,所以我想將所有可能的匹配規則放在每個客戶模塊中,然後讓應用程序選擇它想要使用的規則。但不幸的是,新的匹配規則需要對主數據進行操作,而模塊自然是一個「被動」對象,甚至沒有鏈接到主數據。

我應該建立在作爲主數據實例和客戶記錄作爲參數模塊全局函數,並返回主數據記錄?

或者我應該在別處放置匹配規則嗎?

回答

1

我應該在以主數據實例和客戶記錄爲參數的模塊中創建全局函數,並返回主數據記錄嗎?

一般。

我爲每個客戶編寫的Python模塊,它以模塊級變量的形式爲客戶文件提供各種詳細信息;例如它說明哪個客戶字段包含產品標識符;等

這應該不是真的是一個模塊。這不是錯誤。但它可能會令人困惑。

考慮更改的東西,讓你有這樣的事情。

class AbstractCustomerData(object): 
    """Generic features common to all customer data.""" 

然後。每個客戶都有它有

from the_master_copy import AbstractCustomerData 

class ThisCustomerData(AbstractCustomerData): 
    """All the various kinds of overrides and whatnot.""" 
    def the_matching_rule(self, master_data_object_or_collection_or_whatever): 
     """This customer's override.""" 

通過這種方式,你可以用你的ThisCustomerData情況下,客戶模塊中的一個模塊。該模塊不是任何爭論;該模塊包含客戶的代碼。

客戶的安裝應用程序,然後看起來像這樣

import generic_stuff 
from customer_module import ThisCustomerData, other_feature, yet_more 

現在你可以建立客戶從客戶的擴展模塊導入的generic_stuff加上客戶的特定的覆蓋應用程序的特定實例。

這具有允許更多自由的優點,因爲您不限於將模塊插入類中。你正在使用模塊來包含一個類定義,現在可以做任何東西

相關問題