ООП проектирование конвейера обработки данных - PullRequest
0 голосов
/ 26 октября 2018

У меня есть коллекция экземпляров одного и того же объекта, например (в Python - мой вопрос фактически не зависит от языка)

class shopping_cart:
    def __init__(self, newID, newproduct, currentdate, dollars ):
        shopping_cart.customerID = newID
        shopping_cart.product = newproduct
        shopping_cart.date = currentdate
        shopping_cart.value = dollars

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

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

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

1 Ответ

0 голосов
/ 28 октября 2018

Я думаю, что ваш вопрос смешивает две разные вещи.

Одна из них - это отделение ваших объектов от методов, которые вы хотите применить к ним.Для этого вас заинтересует шаблон Visitor .

Другой способ - повысить производительность при обработке большого количества объектов.Для этого вы можете рассмотреть шаблон Pipe and Filter (или Pipeline), где вы разделяете объекты для обработки их в конвейеры параллельного выполнения и в итоге группируете результаты.

В качестве сноски я думаюВы имели в виду

class shopping_cart:
    def __init__(self, newID, newproduct, currentdate, dollars ):
        self.customerID = newID
        self.product = newproduct
        self.date = currentdate
        self.value = dollars

В противном случае вы устанавливаете членов класса, а не членов экземпляра.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...