Вопрос: как бы вы организовали C# код в следующей ситуации.
Есть некий класс, отвечающий за работу с данными. Для наглядности пусть это будет Image для работы с графикой. Клиентам он предоставляет методы вроде GetPixel, SetPixel, DrawRectangle итд разумеется скрывая подробности как само изображение хранятся.
Задача: обеспечить возможность загрузки и сохранения в различных форматах (bmp, png, jpg).
Пока остановился на таком варианте: есть класс Image, а методы LoadXXXAsync / SaveXXXAsync добавляются как расширения.
Из плюсов
— за каждую операцию отвечает отдельный internal класс, который поддерживать легче, чем один большой load/save.
— просто добавлять новые форматы
Из минусов
— нет возможности напрямую записывать данные из файла в буфер изображения (например по строкам), приходится через GetPixel/SetPixel что несколько медленнее.
Рассматривал варианты в виде наследников Image для каждого формата (не удобно в работе) и единого класса, загружающего и сохраняющего изображения (получается много кода и нарушение SRP).
Но может есть решения лучше?
И второе, какие могут быть минусы, если дать доступ к внутреннему буферу через свойство как internal (т.е. классам загрузки и сохранения достуен, а клиентам нет).