2011-09-18 87 views
2

我在寫一個費用跟蹤程序。目前,我有三個類別Python類設計

Lineitem存儲單個交易的屬性,並具有格式化輸出(收款人,金額日期)等事務的方法。每個lineitem是一個交易。

帳戶是了LineItem的集合,有方法來添加一個訂單項,列出它了LineItem,確定其所有了LineItem的價值等

雜誌是帳戶的集合,有方法來添加一個新的帳戶,列出帳戶,格式化帳戶列表等。

1)這是否看起來是一種明智的組織類的方式?

2)我添加了一個方法,只查看運行時指定的start_date和end_date之間的事務。最好的方法可能是在某處存儲start_date和end_date,然後修改Account以更改某些方法以接收start_date和end_date參數,然後在總計或列出其行時間時檢查lineitem日期。我應該考慮其他方法嗎?

編輯:帳戶中的方法來實現日期檢查。 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

我堅持數據,目前使用泡菜。我知道鹹菜有問題,但我需要非常輕量級的東西,並且不擔心安全問題。 – foosion

+0

爲什麼在這個問題上接近投票? – foosion

回答

2

1)這個問題似乎組織類的明智的方法?

是的,似乎是這樣。請記住LineItem「ispartof」AccountAccount本身是Journal的一部分。在周圍沒有繼承關係,您只需在Journal中收集帳戶,並在Account中收集LineItem的收集。

我看到的唯一問題是關於命名。你說這個班級是LineItem,後來LineItemTransaction。也許你應該給它一些想法。你爲什麼不把它命名爲Transaction?如果班級名稱爲Transaction,你需要喲澄清嗎?

無論如何,您的應用程序的需求將隨着時間的推移而變化(隨着時間而增長)。可能你需要更多地擔心你將如何適應未來的需求,而不是現在,需求是明確的。你的第二個問題與此有關。

2)我添加了一個方法,只查看 運行時指定的start_date和end_date之間的事務。最好的辦法可能是 將start_date和end_date存儲在某處,然後修改Account以更改 某些方法可用於接收start_date和end_date參數,然後 在總計或列出其行時間時檢查lineitem日期。 我應該考慮其他方法嗎?

請注意,您再次使用了「交易」一詞。您必須將date屬性存儲在LineItem的對象中。我認爲這是一個明智的做法。如果您不想不斷更改lookUp方法,爲了跟蹤您可以搜索的所有可能屬性,請考慮創建一個Options類,您可以在其中存儲搜索參數,存儲您現在可能需要的所有屬性,以及在將來。

希望這會有所幫助。

+0

它確實有幫助。 start_date和end_date是在運行時設置的(可能不會設置,或者可能會被設置多次 - 對不起,如果這不明確)。遍歷每個lineitem實例來存儲值似乎效率低下。我正在編輯問題以顯示日期查找方法,並會更多地考慮您的其他建議 – foosion

+0

您的意思是:迭代每個LineItem實例來檢查*值看起來效率低下嗎?如果這是問題,那麼LineItem的列表應該清楚地按日期字段排序。您還可以維護不同的參考列表,以便按多個字段排序。但是,無論如何,正如羅斯曼所建議的那樣,也許數據庫管理員應該來得方便。 – Baltasarq

+0

對於對start_date的誤解等等......我編輯了我的答案以反映它。謝謝。 – Baltasarq