alexander.pronin, клиент-серверная структура приложения, это интересно. В общем-то не предполагал замахиваться на такой масштаб, но это интересное предложение.
Единственное, в чём я с вами не согласен, так это в том, что на сервере считать нечего. Напротив, если разбивать приложение на клиент и сервер, то последний нужно делать толстым. Именно на него нужно переложить и генерирование эскизов, и управление хранилищем, и управление метаданными. Клиент же должен быть предельно лёгким, прям таки пёрышком, получающим от сервера минимум необходимого.
Пользователь решил продолжить мысль 11 Марта 2014, 20:02:45:
По итогам размышлений вырисовалась такая схемка.
Программа состоит из трёх уровней в порядке близости к пользователю: интерфейс, движок (логика), хранилище.
"Хранилище" включает (инкапсулирует) в себя весь механизм управления файловым (или не только файловым) хранилищем изображений. Для вышележащих уровней создаёт абстракцию "элемента" или "образа", имеющего набор атрибутов, включая собственно изображение, его миниатюры, метки и прочие метаданные.
"Движок" не имеет представления о файлах, обменивается с "хранилищем" только посредством уникального идентификатора "образа" и набора атрибутов. Здесь предполагаю разместить сортировки, группировки, создание миниатюр и прочие глупости, имеющие отношение к изоображению. Выполняет запросы "интерфейса" на принятие и выдачу "образа" или набора/наборов "образов" по запросу. Ну типа SQL сервер, только для картинок. И проще, в разы
"Интерфейс" отображает списки, картинки, метки и прочие. Думаю, тут и без слов понятно. Тонкий, тупой, шустрый, возможно (размечтался...) браузерный.
Осталось найти ответы на некоторые вопросы. Если каждую часть реализовать в виде библиотеки внутри одного процесса, то с одной стороны, снимаются проблемы взаимодействия, но с другой стороны это решение фактически вынуждает меня всё делать единообразно, почти монолитно, лишает гибкости и манёвра.
А если делать всё по-уму, то нужно каждый кусок реализовать отдельным процессом, стало быть нужно устроить между ними обмен данными. Как это лучше сделать, у кого есть опыт? Лучше через сеть кинуть связь или через разделяемую память? Я никогда подобного не делал, потому и теряюсь в догадках.
После понимания механизма налаживания межпроцессного взаимодействия, можно будет окончательно решить какими средствами реализовывать задачу. Скажем, я не очень представляю, если я решу реализовать "интерфейс" скажем на JavaFX, то нормально ли оно сможет работать с "движком" и "хранилищем", реализованными скажем на FreePascal.
У кого есть соображения?