У меня есть следующая модель в Python, с IndexPrice
в качестве объекта значения и Index
в качестве объекта со списком прикрепленных цен. Индексная цена не имеет смысла без индекса.
@dataclass(frozen=True, eq=True)
class IndexPrice:
datetime_reported: datetime.datetime
amount: Decimal
currency: str
class Index:
def __init__(
self,
index_code: str,
specification: str
):
self.stable_index_code = index_code # type: str
self.specification = specification # type: str
self._prices = set() # type: Set[IndexPrice]
def add_price(self, index_price: IndexPrice):
self._prices.add(index_price)
def list_prices(self) -> List[IndexPrice]:
return list(self._prices)
Ожидается, что список цен индекса на индекс станет относительно большим и в конечном итоге неограниченным по размеру. Некоторые списки будут начинаться с 36 500 наименований.
Мне необходимо заменить отдельные цены в индексе, однако у меня нет ни одного идентификатора, на который можно сослаться. Я понимаю концепцию объекта-значения, не имеющего долгосрочной идентичности, и что он может быть заменен.
Однако я действительно задаюсь вопросом о том, как лучше найти / заменить индексную цену в этом случае. Наивным способом реализации этого может быть
class Index:
# ~~~ existing content snipped ~~~
def replace_price(
self,
old_index_price: IndexPrice,
new_index_price: IndexPrice,
):
self._prices = set([
index_price if not old_index_price else new_index_price for index_price in self._prices
])
Я чувствую, что эта реализация немного неаккуратна, в первую очередь потому, что все на уровне обслуживания, которое должно заменить индексную цену, должно знать каждую деталь как старого и новая цена.
Мне не хватает другой, лучшей реализации или мне нужно начать рассматривать вопрос о том, чтобы сделать IndexPrice
сущностью в своем собственном праве?