2011-03-24 3 views
0

저는 파이썬으로 작업하고 있습니다. 그러나 이것은 일반적인 디자인 질문이므로 일반적인 대답을 환영합니다. 문맥을 설명의 일부로 설명하지 않고 예제로 제공합니다.디자인 도움말 : 입력을 기반으로 구성 가능한 동작

CSV 파일을받는 스크립트가 있는데이 파일의 필드를 사용하여 자동 전화를 겁니다. 필드는 말할 이름, 말 할 날짜 및 전화 할 전화 번호를 나타냅니다. 예를 들어 "555-555-4321, Bob, Jill, 3/30/2011"과 같이 입력하면 555-555-4321로 전화가 걸리며 로봇 메시지는 "Bob, Jills 생일을 잊지 마라. 다음주 수요일, 지금부터 1 주일. "

제 질문은이 시스템을 구성하기 위해 어떤 디자인 패턴이 유용할까요? 더 구체적으로 말하자면 입력 라인의 형식과 음성 메시지 생성을위한 몇 가지 동작을 지정하고 싶습니다. "Bob"과 같은 일부 필드는 "현장에서 말하기"와 같이 간단 할 수 있습니다. 날짜와 같은 다른 필드는 말하기 위해 일부 변형이 필요합니다 (즉, "3/30/2011"이 "다음 수요일"이되는 방법). 또한 "555-555-4321, Bob, 6 : 00"과 같은 입력은 6:00에 매일 Bob에게 전화를 걸어 "wake up!"과 같은 다양한 형식의 라인 형식을 원합니다.

제 목표는 이러한 유형의 것을 정의하고 구성 할 수있는 웹 인터페이스를 갖추는 것입니다. 나는 내 소스 코드를 해킹하여 이러한 문제를 해결하는 방법을 알고 있지만 소스 코드를 해킹하는 것은 간단하고 사용자 친화적 인 프론트 엔드에서 먼 길이다.

+1

어떤 방법을 사용합니까? 어떻게 생겼지? 매개 변수 또는 전체 CSV 파일로 필드/변수를 사용합니까? 도움이 될만한 몇 가지 적합한 패턴이 있기 때문에 앱이 어떻게 작동하는지 더 말할 필요가 있습니다. 그러나 그들이 similarar이기 때문에 초당 대신에 선택하는 것이 정교화 된 상황에 달려 있습니다. – dantuch

답변

1

현재 관련이 있지만 동일한 문제는 해결하고 있습니다.

내 솔루션은 대상 csv 줄과 동일한 길이의 컨트롤 목록을 만드는 것입니다. 컨트롤 목록의 각 요소는 useMethod의 이름입니다. 필자의 경우 useMethod는 편집기 위젯이다. 귀하의 경우에는 필드가 텍스트 음성 변환 엔진에 의해 어떻게 해석되는지를 정의하는 함수가 될 것입니다. 각 행에 대해 필드를 반복하면서 적절한 처리 위젯을 호출 할 수 있습니다.

그래서 당신의 예 "555-555-4321, 밥, 질,/2천11분의 30 세",

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 파일의 첫 번째 행에 저장하거나 다른 방법으로 가져올 수 있습니다.

편집 : 구성을 위해 웹 인터페이스를 사용하는 것에 대한 추가 정보에 주목하면 새로운 제어 목록을 제공하는 간단한 방법이 될 것입니다.