2011-09-18 54 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