Пустой класс Record и функция с плавающей точкой, которая (как правило) применяется к отдельной записи, - это подсказка, что вы не разработали свой класс должным образом.
class Record( object ):
"""Assuming rtda and pnl must exist."""
def __init__( self ):
self.da= 0
self.rt= 0
self.rtda= 0 # or whatever
self.pnl= None #
self.sink = None # Not clear what this is
def setPnl( self, node_prices ):
# fill RT and DA prices from the hash retrieved above
# calculate dependent values: RT-DA and PNL
Теперь ваш calculate_pnl( records, node_prices )
проще и правильно использует объект.
def calculate_pnl( records, node_prices ):
for record in records:
record.setPnl( node_prices )
Суть не в том, чтобы банально реорганизовать код небольшими способами.
Дело в следующем: Класс Инкапсулирует Ответственность .
Да, пустой класс обычно является проблемой. Это означает, что обязанности разбросаны где-то еще.
Аналогичный анализ имеет место для сбора записей. Это больше, чем простой список, поскольку коллекция в целом содержит операции, которые она выполняет.
«Запрос-преобразование-рендеринг» не совсем верно. У вас есть модель (класс записи). Создаются экземпляры модели (возможно, из-за запроса.) Объекты модели отвечают за свои собственные преобразования и обновления состояния. Возможно, они отображаются (или отображаются) каким-либо объектом, который проверяет их состояние.
Это тот шаг «Преобразование», который часто нарушает хороший дизайн, распределяя ответственность повсюду. «Преобразование» является пережитком не-объектного дизайна, где ответственность была туманной концепцией.