Я довольно давно занимаюсь разработкой
небольшой Java библиотеки для работы над задачами линейной алгебры и мне приходилось часто принимать решения по поводу дизайна публичного API. До этого момента все шло отлично. Но недавно появился один момент который не дает мне покоя. Хотелось бы узнать мнение сообщества о том как поступить в такой ситуации.
В чем суть. Есть разреженные матрицы, которые в основном хранят нули и лишь несколько значимых элементов. Сейчас я на пороге выбора добавлять ли в публичный API для разреженных матриц метод
toArray()
. С одной стороны у пользователя должна быть такая возможность (конвертировать матрицу в двумерный массив). С другой — эта операция прямо противоречит всей идеологии разреженных матриц — уменьшение используемой памяти.
Еще одна сторона медали — я решил разделить семейство плотных и разреженных матриц на уровне интерфейса. И сейчас я не могу придумать ни одного метода, который был бы характерен для плотных но не применим к разреженным. Метод
toArray()
очень подходит на эту роль, в то время как метод
cardinality()
— количество не нулевых элементов — явный претендент для API разреженных.
Резюмируя. Есть потребность придумать характерный метод для плотной матрицы. Есть кандидат — самый низко висящий фрукт —
toArray()
. Префекционист во мне говорит что
toArray()
должен быть у всех. Лентяй и костыльный программист — только у плотных.
Очень прошу совета у сообщества что делать со злополучным методом.