Мне кажется, что у вас есть Поток данных .
Что у вас есть Получить (загрузить) данные -> Данные процесса -> Выходные данные . В основном это конвейер с тремя этапами.
Если вы используете объект для моделирования этого у вас, у вас есть два типа объектов: те, которые выполняют операции, и один или несколько, которые управляют потоком данных и упорядочением операций.
Позволяет использовать три интерфейса (вы можете использовать абстрактные классы для их определения, это не имеет значения) для определения шагов конвейера: IDataDownloader , IDataProcessor и IDataOutputer .
Позволяет добавить еще один объект, который будет представлять и управлять конвейером:
(Примечание: у меня нет опыта работы с Python, поэтому я напишу его на C # извините ..)
public class Pipeline {
private IDataDownloader mDataDownloader;
private IDataProcessor mDataProcessor;
private IDataOutputer mDataOutputer;
public void Setup() {
// use a config file to select between the two ways
if (Config.UseOldWayDownloader) {
mDataDownloader = new OldWayDownloader();
}
else {
mDataDownloader = new NewWayDownloader();
}
// ....
// or you can use service locator or dependecy injection that will get
// a specific downloader based on configuration/setup
mDataDownloader = Services.Get<IDataDownloader>();
// ....
}
public void Execute() {
var data = mDownloader.Download();
var processedData = mDataProcessor.Process(data);
mDataOutputer.Output(processedData);
}
}
Таким образом, вы получаете хорошее разделение интересов и получаете модульную систему, которую вы можете расширять. Эта система также является составной. Вы можете составлять его части по-разному.
Может показаться, что это больше работы, но это не может быть правдой. Чистые дизайны часто легче писать и расширять.
Это правда, что вы можете написать немного больше кода, но этот код может быть написан быстрее из-за чистого дизайна, и вы можете сэкономить время от отладки. Отладка - это то, что занимает большую часть времени, когда мы пишем программное обеспечение, но часто ее переполняют программисты, которые думают, что они могут измерять только путем написания строк кода.
Одним из примеров этого является случай со свободными типизированными языками. Довольно часто вы пишете меньше кода, поэтому он быстрее, но он подвержен ошибкам из-за ошибок. В случае ошибки вы получаете более (а иногда и более сложную) отладку, поэтому вы тратите время.
Если вы начнете с простого приложения для проверки концепции, оно значительно ускорит разработку. Как только вы доберетесь до надежного программного обеспечения, которое будет протестировано, наступят другие силы.
Чтобы гарантировать надежность вашего программного обеспечения, вам нужно написать больше тестов и больше проверок / утверждений, чтобы убедиться, что все работает гладко. Таким образом, в конечном итоге вы, вероятно, получите такой же объем кода, что строгая типизация выполняет некоторые проверки для вас, и вы можете написать меньше тестов.
Так что лучше? Ну ... это зависит.
Есть несколько факторов, которые будут влиять на скорость развития.
вкус и опыт программистов с языком. Приложение также повлияет на это. Некоторые приложения легче писать на свободных типизированных языках, другие на строго типизированных языках.
Скорость может быть разной, но это не всегда так, иногда просто так.
Я думаю, что в вашем случае вы будете тратить больше времени на то, чтобы правильно настроить иерархию и отладить ее, даже если в итоге у вас будет на несколько строк меньше кода. В конечном счете, сложный для понимания дизайн значительно замедлит вас, если вам потребуется его расширить.
В конвейерном подходе добавление новых способов загрузки, обработки или вывода данных - это вопрос добавления одного класса.