Дизайн класса Python - PullRequest
       9

Дизайн класса Python

2 голосов
/ 18 сентября 2011

Я пишу программу отслеживания расходов.На данный момент у меня есть три класса

Lineitem хранит атрибуты для отдельных транзакций и имеет методы форматирования транзакции для вывода (получатель платежа, дата суммы) и т. Д. Каждый элемент lineitem представляет собой одну транзакцию.

Accountпредставляет собой набор линейных элементов и содержит методы для добавления линейного элемента, перечисления его линейных элементов, определения значения всех его линейных элементов и т. д.

Журнал представляет собой набор учетных записей и содержит методы для добавления новой учетной записи, спискаего учетные записи, форматирование списка учетных записей и т. д.

1) Кажется ли это разумным способом организации занятий?

2) Я добавляю метод для просмотра транзакций только между временем выполнения, указанным в start_date и end_date.Наилучшим способом может быть сохранение где-нибудь start_date и end_date, затем изменение учетной записи, чтобы изменить некоторые методы для получения параметров 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

1 Ответ

2 голосов
/ 18 сентября 2011

1) Кажется ли это разумным способом организации занятий?

Да, похоже. Помните, что LineItem "ispartof" Account, а сам Account является частью Journal. Вокруг нет никаких отношений наследования, у вас просто есть коллекция учетных записей в Journal и коллекция LineItem в Account.

Единственная проблема, которую я вижу, связана с именами. Вы говорите, что класс LineItem, а позже, что LineItem - Transaction. Может быть, вы должны подумать об этом. Почему ты не назвал это Transaction? Вам нужно уточнить это, если класс был назван Transaction?

В любом случае, потребности вашего приложения будут меняться со временем (будут расти со временем). Вероятно, вам нужно больше беспокоиться о том, как вы будете адаптировать его к будущим потребностям, а не сейчас, в которых требования ясны. Ваш второй вопрос связан с этим.

2) Я добавляю метод для просмотра только транзакций между время выполнения указано start_date и end_date. Лучший способ может быть хранить где-нибудь start_date и end_date, затем изменить Account для изменения некоторые методы для получения параметров start_date и end_date, а затем проверять даты lineitem при суммировании или перечислении его графиков работы. Являются Есть ли другие подходы, которые я должен рассмотреть?

Обратите внимание на то, что вы снова использовали слово Transaction. Вы должны хранить атрибут date в объектах LineItem. Я думаю, что это разумный подход. Если вы не хотите постоянно изменять методы lookUp, чтобы отследить все возможные атрибуты, которые вы можете искать, рассмотрите возможность создания класса Options, в котором вы можете хранить параметры поиска, сохраняя все атрибуты, которые вы может понадобиться сейчас и в будущем.

Надеюсь, это поможет.

...