2011-03-24 43 views
0

我在Python中工作,但這是一個通用設計問題,因此歡迎提供一般答案。我會解釋這個問題的背景下不是一部分,而是作爲一個例子:設計幫助:基於輸入的可配置行爲

我有收到一個CSV文件的腳本,它使用的領域在這個文件中進行自動電話。這些字段表示要說出的姓名,要說的日期以及要撥打的電話號碼。例如,像「555-555-4321,鮑勃,吉爾,2011年3月30日」這樣的輸入可能被放置到555-555-4321,並且機器人消息傳送說「鮑勃,別忘了吉爾斯的生日是下週三,從現在起一週。「

我的問題是什麼樣的設計模式將是使該系統可配置有用嗎?更具體地說,我想指定輸入行的格式和生成語音消息的一些行爲。有些領域,比如「鮑勃」,可以像「說出領域」一樣簡單。其他領域,如日期,需要進行一些轉換才能說出來(即「3/30/2011」如何成爲「下週三」)。我還希望有各種線路格式,例如,輸入如「555-555-4321,Bob,6:00」可能每天在6:00打電話給Bob,並說「喚醒!」

我的目標是有一個網絡接口,允許定義和配置這些類型的東西。我知道如何通過黑客攻擊我的源代碼來解決這些問題,但從簡單和用戶友好的前端入侵源代碼是一個漫長的過程。

+1

你使用什麼方法?他們看起來像什麼?您使用字段/變量作爲參數或整個CSV文件?你需要多說一些你的應用程序的工作方式,因爲有一些合適的模式可以用來幫助你(我猜),但是因爲它們是相似的,所以首先選擇代替第二種模式取決於具體的上下文。 – dantuch 2011-03-24 01:43:43

回答

1

我正在解決一個相關但不完全相同的問題。

我的解決方案是創建相同的長度作爲目標CSV線,其中在所述控制列表中的每個元素是一個useMethod的名稱的控制列表。在我的情況下,useMethod是一個編輯器小部件;在你的情況下,這將是一個函數,它定義了字段是如何被你的文本到語音引擎解釋的。對於每一行,您可以遍歷這些字段,調用適當的處理小部件。

因此,對於你的例子 「555-555-4321,鮑勃·吉爾3/30/2011」,

import csv 
def phoneNumber(number): 
    ... 
def userName(name): 
    ... 
def targetDate(datestring): 
    ... 
control = [phoneNumber, userName, userName, targetDate] 
with open("csvFile", "r") as inFile: 
    reader = csv.reader(inFile) 
    for row in reader: 
     for op, item in zip(control, row): 
      op(item) 

我注意到,這隻能如果CSV文件每元素不斷演繹,但如果它有不同的解釋,那麼csv文件是錯誤的存儲方法。我還注意到,你需要一些其他控制對象來產生句子的其餘部分;這是留給讀者的一個練習。 :)

這可以讓你擁有了可以通過簡單地改變控制字符串被分配到CSV文件中的字段解釋函數庫。一個新的控制字符串將調用不同的字段解釋順序,無需更改源代碼,新字符串可以在命令行中輸入,存儲在csv文件的第一行,或以其他方式引入。

編輯:並注意到您在使用Web界面配置附錄,這將是一個直接的方式提供了新的控制列表。