2011-09-18 6 views
2

비용 추적 프로그램을 작성하고 있습니다. 현재 3 클래스가 있습니다Python 클래스 디자인

Lineitem은 개별 거래의 속성을 저장하고 출력 (수취인, 금액 날짜) 등을위한 메소드 형식을 갖습니다. 각 라인 항목은 하나의 거래입니다.

계정 lineitems의 모음입니다 등

저널 계정의 모음입니다,하는 LINEITEM 추가의 lineitems 목록을 그 lineitems의 모든 값을 결정하는 방법을 가지고 있으며, 새로운를 추가하는 방법이있다 계정 목록을 구성하고 계정 목록을 구성하십시오.

1) 수업을 구성하는 것이 현명한 방법 인 것 같습니까?

2) 런타임에 지정된 start_date와 end_date 사이의 트랜잭션 만 보는 메소드를 추가합니다. 가장 좋은 방법은 start_date 및 end_date를 어딘가에 저장 한 다음 Account를 수정하여 start_date 및 end_date 매개 변수를 수신하는 일부 메소드를 변경 한 다음 Linetimes를 합계 또는 나열 할 때 lineitem 날짜를 검토하는 것입니다. 고려해야 할 다른 접근법이 있습니까?

EDIT : 날짜 확인을 구현하는 계정의 방법. self.lineitems는 lineitems의 목록입니다. start_date 및 end_date는 설정되고 런타임이며 설정할 수 없거나 두 번 이상 설정할 수 있습니다.

def get_lineitems(self, start_date, end_date): 
     if start_date and end_date: 
      for lineitem in self.lineitems: 
       if start_date <= lineitem.date <= end_date: 
        yield lineitem 
     else: 
      for lineitem in self.lineitems: 
       yield lineitem 
+0

데이터를 어떻게 보존하고 있습니까? ORM을 사용하고 있습니까? –

+0

현재 피클을 사용하여 데이터를 유지하려고합니다. 나는 pickle에 문제가 있다는 것을 알고 있지만, 아주 가벼운 것을 필요로하고 보안 문제에 대해 걱정하지 않는다. – foosion

+0

왜이 질문에 가까운 표가 있습니까? – foosion

답변

2

1)이 수업을 정리하는 합리적인 방법을 보이는가?

네, 그렇게 보입니다. LineItem "ispartof"Account이고 Account 자체는 Journal의 일부임을 기억하십시오. 주위에 상속 관계가 없습니다. 계정 수는 Journal이고, LineItemAccount입니다.

유일한 문제는 이름 지정에 관한 것입니다. 클래스가 LineItem이고 나중에 LineItemTransaction이라고 말합니다. 어쩌면 당신은 그것을 잠시 생각해야합니다. 왜 그걸 Transaction이라고하지 않았습니까? 클래스 이름이 Transaction이라면 명확히 할 필요가 있습니까?

어쨌든 응용 프로그램의 요구 사항은 시간이 지남에 따라 변경 될 것입니다. 아마 지금 요구 사항이 명확하지 않은 미래의 요구에 어떻게 적용 할 것인지에 대해 더 걱정할 필요가있을 것입니다. 두 번째 질문은 이것과 관련이 있습니다.

2) 나는 단지 실행시 지정된 시작일과 종료일 사이의 거래를보고하는 방법을 추가 해요. 가장 좋은 방법은 어딘가에 start_date 및 end_date를 저장 한 다음 start_date 및 end_date 매개 변수를 수신하기 위해 몇 가지 방법을 변경 한 다음 계정의 전체 시간 또는 전체 시간을 나열 할 때 lineitem 날짜를 검토하는 것입니다. 내가 고려해야하는 다른 접근법이 있습니까?

'거래'라는 단어를 다시 사용했는지 확인하십시오. LineItem의 개체에 date 특성을 저장해야합니다. 나는 그것이 합리적인 접근이라고 생각한다.lookUp 메소드를 지속적으로 변경하지 않으려면 검색 할 수있는 가능한 모든 속성을 추적하려면 검색 매개 변수를 저장할 수있는 Options 클래스를 만들고 지금 필요한 모든 속성을 저장하고 미래에.

희망이 도움이됩니다.

+0

도움이됩니다. start_date 및 end_date는 런타임에 설정됩니다 (설정되지 않았거나 한 번 이상 설정 될 수 있습니다 - 명확하지 않은 경우 미안). 각 lineitem 인스턴스를 반복하여 값을 저장하는 것은 비효율적으로 보입니다. 날짜 조회 방법을 보여줄 질문을 편집 중이며 다른 제안에 대해 더 많이 생각할 것입니다 – foosion

+0

: 각 LineItem 인스턴스를 반복하여 값을 확인 * 값이 비효율적으로 보입니까? 그게 문제라면 LineItem의 목록을 날짜 필드별로 명확하게 정렬해야합니다. 참조의 여러 목록을 유지 관리하여 여러 필드별로 정렬되도록 할 수도 있습니다. 그러나 Roseman이 제안한 것처럼 어쨌든 데이터베이스 관리자가 편리해야합니다. – Baltasarq

+0

start_date에 대한 오해에 대해 유감스럽게 생각합니다. 답변을 반영하도록 답변을 수정했습니다. 고맙습니다. – Baltasarq