Я еще раз повторю вопрос: "Кому адресован весь этот плач Ярославны?"
Попытаюсь чуть упростить ответ на него. Возьмем статистику коммитов за последние 5 лет:
Viktor Demidov - 1,100 commits (Надо же, какое круглое число ненароком вышло, я не специально)
zed - 727 commits
Sergey Gаvrilеnkо - 106 commits
Aleksandr Alekseev - 16 commits
Alex Whiter - 8 commits
Alexandr Dolgov - 3 commits
Pavel Gordeyko - 1 commit
К кому из этого списка претензии и на каком основании?
DJ VK писал(а):По второму вопросу чисто философский интерес. Если есть код и появится в каком нибудь Sas4OS/2 какой нибудь супер-пупер инструмент, то не автор кода же виноват в том что в обычной sas планете нет такого инструмента.
Ну, если автору кода нужно на десктопе, то именно он и виноват, что в обычной не появилось. Если автору кода это не нужно, то виноват тот кому нужно и кто ничего не сделал (самому кодить не обязательно, можно найти и другие способы). Ну а если никому не нужно - то это таки никому не нужно.
DJ VK писал(а):Где взять разработчиков? Я На роль разработчиков не гожусь. Я по складу ума генератор идей. Разработать и воплотить на коленке с нуля - это да. А "встроить" хрен знает во что - это не мое. Неужели это противоречие (хочется развития программы, но нет возможности заниматься чисто техническими деталями) не разрешимо?
Я сейчас неприятную вещь скажу, вы не обижайтесь, но обычно такие генераторы идей просто не понимают реальную разницу между "на коленке с нуля" и стабильным поддерживаемым кодом в плане трудоемкости.
DJ VK писал(а):Здесь чувствуешь себя почти один на один с огромным кодом...
Я хоть раз отказался отвечать на содержательный вопрос по коду? Покажите пример - я постараюсь исправиться.
DJ VK писал(а):Если бы мне у себя попался код из двух юнитов (юнит и интерфейс) - второй бы в ту же секунду прекратил свое существование. Неоптимально. Непонятно. Значит в топку.
Временами да, неоптимально, но увы в старых Делфи не завезли умных указателей с подсчетом ссылок в обычные классы, только в интерфейсные. А это означает что приходится в любом случае городить огород.
Но так далеко не всегда. Бывает, что интерфейс нужен именно для отделения интерфейса класса (извините за тавтологию) от его реализации и зависимостей этой реализации. Ну и случаев, когда реализаций много, также полно.
DJ VK писал(а): Планета с сотнями интерфейсов больше походит на Microsoft SDk, DDK, DirectX SKD, или исходники RAD STUDIO.
Не задумывались, что причина может быть одна и та же - огромное количество разных функций, связанных друг с другом самым неожиданным образом.
- скрытый текст: показать
- В качестве примера: добавляем поддержку во встроенном браузере специальных ссылок на картинки в папке MediaData, что бы можно было не писать абсолютные пути, казалось бы при чем тут импорт меток, тут задача только для браузера? А вот если импортируем jpg с геотегами, то в описание метки автоматом вставляется ссылка на картинку и нужно проверять не лежит ли картинка уже в MediaData и заменять абсолютный путь на специальную ссылку. Все теперь экспорты должны знать о этом специальном формате ссылок и иметь ссылку на текущий конфиг, в котором задан путь к актуальной папке MediaData. И вот таких неочевидных связей в процессе разработки реального удобного в использовании инструмента, а не сделанного на коленке костыля - возникает огромная куча в самых неожиданных местах.
DJ VK писал(а): ну например каждый экспорт кэша имеет внутри свой поток. Зачем? именно для такого абстрактные классы и придуманы. Три виртуальных метода - начало экспорта, добавление тайла и завершение. Есть поговорка - если один и тот же кусок кода вызывается более 2х раз надо вынести его в функцию. А теперь считаем 14 одинаковых классов !!!!
Отличный пример. Вы реально заглядывали в эти файлы? Вот чисто ради интереса хоть один открывали? Покажите мне хоть в одном из свой поток, кроме как в названии?
- скрытый текст: показать
- Да, нужно переименовать. Если есть время и желание помочь в развитии проекта, то можете заняться
DJ VK писал(а):Информация о тайле. Тайлы самые обычные. Казалось бы и класс для хранения информации о тайле должен быть один (ну или два если векторные тайлы шибко отличаются). Считаем
Ну, во-первых, смешались в кучу кони и люди, классы и интерфейсы, также те кто их используют .
Интерфейсов всего два ITileInfoBasic - базовая информация о тайле, ITileInfoWithData - то же что в первом, но еще есть само содержание тайла, если он существует.
А вот это уже реализации.
TTileInfoBasicBase - базовый класс
TTileInfoBasicNotExists - если тайла нет, то просто заглушка. возможно стоило обойтись просто nil
TTileInfoBasicTNE - присутствует tne и соответственно хранится дата его создания
TTileInfoBasicExists - тайл присутствует, вся информация о файле, но самих данных нет
TTileInfoBasicExistsWithTile - то же что в прошлом, но уже есть данные
Да, возможно стоило ограничится одним интерфейсом с признаком наличия данных и одной универсальной реализацией. Возможно. В свое время мне показалось, что так лучше. Возможно я был не прав, но, в любом случае, то что было до появления этих интерфейсов было еще более запутано.
Все остальные пункты, приведенные вами, это то что использует ITileInfoBasic для своей работы.
DJ VK писал(а):Но Для чего я трачу кучу времени на переписывание своих проектов почти заново
Это говорит не в вашу пользу.
DJ VK писал(а): Вдохнуть в него новую жизнь, сделать его лучше, понятнее. Чтобы через 5 лет найти то или иное место в коде с бодуна не составило труда... И с таким подходом к жизни (пусть всем будет удобнее) ковыряние в этой планете вызывает тоску смертную... Труп реанимируем.
Печально видеть такую оценку 10 лет свой работы, но видимо вы правы. Е-сь с этим кодом сами. В дальнейшем любые хотелки и идеи только за деньги. Вы своего добились. Труп - так труп.