что такое пользовательская ориентация библиотеки
Публикации сотрудников РГБМ
Пользовательская ориентация как средство общественной адвокации
Автор: Клюев В.В., Захаренко М.П.
Издание: Независимый библиотечный адвокат. — 2015. — N 3. — С.39-42.
Владимир КЛЮЕВ,
профессор, заведующий кафедрой управления информационно-библиотечной деятельностью МГИК
Марина ЗАХАРЕНКО,
заместитель директора по научной и методической работе Российской государственной библиотеки для молодёжи
Адвокационная деятельность библиотек может реально рассматриваться как новое направление библиотековедения. Под термином «библиотечная адвокация» (library advocacy) логично понимать деятельность по защите и продвижению интересов библиотек, повышению социального престижа профессии, то есть формированию положительного общественного имиджа. При этом основными общепринятыми принципами такой адвокации являются публичность, честность, прозрачность, открытость, бескорыстность. Она направлена на формирование у общественности понимания происходящих перемен (или необходимости перемен), позволяет управлять изменениями, поворачивать их в нужную сторону. Глубинный посыл адвокации обосновать неопровержимую значимость (актуальность) библиотеки для современного государства, показать многогранность её потенциала и разноаспектность повседневной деятельности, убедить в правомерности расходования выделяемых бюджетных (налоговых) поступлений и привлечения внебюджетных инвестиций в рамках фандрейзинга для успешного функционирования и развития как общественного блага.
Понятие библиотечной адвокации пока не очень уверенно используется отечественными коллегами, но широко распространено в европейской профессиональной лексике.
В разветвлённой системе вариативных социальных коммуникаций, при интенсивных интернетизации и компьюникации общества, а также реалиях функционирования в условиях минимизации у людей свободного времени публичная библиотека обречена на изменения своих приоритетов и форм деятельности. Объективными факторами выступают изменение образа и ритма жизни людей, смешение реального и виртуального пространств, появление новых форматов профессиональной деятельности. Давно назрел переход от привычной многим библиоцентристской концепции развития большинства отечественных библиотек (предлагаем то, что имеем, и считаем это нужным/возможным/правильным) к пользовательскоориентированному обслуживанию в условиях или с помощью библиотеки как общественного пространства, созданного и содержащегося на средства налогоплательщиков, а следовательно, «подотчётного» им и адекватно реагирующего на их нужды-потребности-запросы. Недаром одна из международных акций ИФЛА называется «Библиотека в повестке дня» и нацелена на повышение осведомлённости общества, чиновников и возможных партнёров об их важной социальной роли и значении (говоря современным языком, возможных сервисах и опциях) для так называемого местного сообщества, их популяризацию и активное лоббирование для получения поддержки и понимания перспектив развития со стороны учредителя (балансодержателя), а также благотворителей и спонсоров.
Обратим внимание, что в недавно утверждённом министром культуры Российской Федерации «Модельном стандарте деятельности общедоступной библиотеки» (31.10.2014) в качестве одного из базовых принципов закреплён учёт предпочтений пользователей при предоставлении услуг и выполнении работ. При этом «услуга в библиотеке» определяется как результат её непосредственного взаимодействия с пользователем по выявлению и удовлетворению его информационных и культурно-просветительских потребностей. А «работа в библиотеке» трактуется как разновидность библиотечно-информационной и культурно-просветительской деятельности, направленная на развитие общества.
В этой связи логично и правомерно привнести в деятельность современной общедоступной публичной библиотеки активную маркетинговую составляющую «клиентоориентированности», позиционируя себя и свои возможности не только как средство/место получения знаний и информационной навигации, но и площадку для коммуникаций, «общественную гостиную», место релаксации и интеллектуального досуга, реализации способностей и амбиций каждого, с одной стороны, а также пространство для делового пребывания и комфортного занятия «своими текущими делами», с другой стороны. То есть в системном проявлении она способна выступать трёхчастно: в качестве собственно библиотеки (в обыденном понимании, но с актуальными сервисами и ресурсами), а ещё безбарьерной площадки для межличностного общения и интеллектуального досуга (платный аналог так называемые антикафе) и своеобразного мини-офиса в публичном пространстве (коммерческий вариант коворкинг). В таком функциональном понимании и проявлении реально становится актуальным универсальным пространством для различных пользовательских групп.
В последние годы публичные библиотеки всё чаще позиционируют себя как «третье место» (third place) после дома и работы (учёбы), как доступная общественная площадка для самореализации человека, неформального общения, социального взаимодействия, делового пребывания. Анализ успешной зарубежной и отечественной практики позволяет со всей очевидностью заключить, что она превращается в центр притяжения так называемого местного сообщества тогда, когда ориентирована в своей повседневной деятельности на решение социальных проблем населения, обеспечение самореализации разных групп пользователей, гарантирует безопасное и комфортное пребывание в своих стенах. Социальный феномен «третьего места» в том, что это реальная потребность людей работать не в офисе и не дома; не только работать, но и обмениваться информацией с другими, знакомиться, взаимодействовать, развлекаться «наедине со всеми».
Более образно можно констатировать, что, сохраняя и модернизируя собственно традиционные базовые библиотечные функции, общедоступная публичная библиотека всё более востребована в качестве аналога антикафе (общественного «свободного» комфортного пространства для вербальных коммуникаций), но на интеллектуальной основе, и прообраза коворкинга (в общественном месте наличие личного оборудованного рабочего пространства или отдельной зоны (лофта) для совместной работы). В данном контексте становятся особенно актуальными безбарьерность среды, удобство графика работы, адекватность (дружелюбие!) персонала, то есть пользовательская ориентация всех аспектов функционирования библиотеки. Именно «человекоориентированность» позволит активно привлекать пользователей и реально стимулирует её востребованность, а значит развитие в новых социально-культурных условиях.
Ярким примером пользовательскоориентированного обслуживания правомерно позиционировать Российскую государственную библиотеку для молодёжи. При организации обслуживания здесь всегда помнят, что человеку услуги нужны не сами по себе, а лишь в связи с его личностными потребностями в социализации, карьере, формировании имиджа, удовлетворении познавательных потребностей, для эмоциональной разгрузки. При этом он как личность хочет, чтобы его не перегружали, «не прогибали», не заставляли, не принуждали. Очень близко коллегам универсальное правило: уважай себя, уважай других и уважай место, где ты находишься.
Сегодня люди хотят приходить в комфортные, удобные помещения, оснащённые современными коммуникационными (мобильными, виртуальными) технологиями теми, с которыми они имеют дело во внебиблиотечной среде. С одной стороны, должна быть учтена потребность каждого иметь личное пространство, с другой обеспечена возможность работы в группе и общения (совместного времяпрепровождения). В любом случае у пользователей должно возникать ощущение от библиотеки как от защищенной и дружелюбной территории, привлекательной и соответствующей их стилю жизни. И здесь задача маркетинговых технологий всё это объективировать, в том числе «уютную демократичность» пребывания (работы, релаксации, социального общения) в таком вне стандартной схемы традиционной библиотеки и её обычного функционала библиотечном пространстве. При этом как новый тип она будет восприниматься там, где есть комфортное место, где можно провести время как дома, но, не отвлекаясь на домашние дела, и как на работе, но занимаясь тем, что действительно интересно. В этой связи и важно адекватно переосмыслить роль и функции библиотек сегодня.
Внешними привлекательными посылами модернизации деятельности публичных библиотек выступает реорганизация пространства выделение площадей для общественного пребывания людей, встреч и неформального общения. Нет сомнения в том, что важной составляющей продолжат быть книги, журналы, аудио- и видеоматериалы, электронные ресурсы и другие носители контента, а богатство, разнообразие и релевантность её документного фонда останутся ключевыми индикаторами оценки функционального потенциала. Но при этом знаниевая и информационная функции перестают быть самодавлеющими и главенствующими. На первый план выступает социально-коммуникационный аспект.
Можно выделить следующие параметры, характеризующие успешность деятельности общедоступной публичной библиотеки как «третьего места»:
В заключение подчеркнём, что будущее публичной библиотеки в её открытости для всех. В связи с этим важно создать комфортные условия и гармоничное многофункциональное (гибкое по функционалу!) технологичное пространство свободного посещения и неформального перемещения. Именно здесь объективное проявление системной адвокации, когда пользователи (налогоплательщики) сами (по собственной охоте) приходят в библиотеки, находя и получая в ней необходимые им (и ожидаемые!) базовые и сервисные услуги, интеллектуальные продукты и выполняемые по их запросу профильные и сопутствующие работы.
Что такое клиентоориентированность: пять ключевых признаков с примерами
Содержание:
Об эксперте: Оксана Селендеева — ИТ-предприниматель и идейный вдохновитель Школы программирования для детей CODDY. Соорганизатор благотворительного проекта помощи детям Donate-Codding. Основательница групп Sell Your Head в соцсетях.
Что такое клиентоориентированность
Клиентоориентированность — это умение вовремя определить потребности и желания клиентов, чтобы удовлетворить их с максимальной пользой. В идеале — превзойти ожидания и вызвать восторг.
Это альтернатива продуктовым подходам «Продать можно все» и «Хороший товар найдет покупателя». Опираясь на них, компания сначала создает продукт, а уже потом думает, кому его продать, чтобы увеличить продажи. В клиентоориентированном подходе стартовая точка размышлений — желания клиента.
Перевернуть маркетинговую логику предложил экономист Питер Друкер [1]. «Клиент определяет бизнес», — писал он в книге «Практика менеджмента» еще в 1954 году. Не так важно, что компания считает ценностью товара, главное — за что платит клиент. Предназначение бизнеса — соответствовать его запросам.
«Наша задача — дать вам то, что удовлетворит желания, о которых вы не подозревали. После чего представить свою жизнь без этого станет невозможно», — CEO Apple Тим Кук [2].
Владельцам бизнеса бывает трудно провести грань между клиентоориентированностью и выполнением «хотелок» клиента. Главное правило — не нужно ориентировать бизнес на чужих клиентов. Различить здоровую и патологическую клиентоориентированность поможет вопрос: «Кто не наш клиент?» Например, бренду люксовой парфюмерии не стоит реагировать на просьбы провести розыгрыш продукта за репост в соцсетях, а веганскому ресторану — расширять ассортимент по просьбе любителей мяса.
Клиент всегда прав, если это ваш клиент. Нужно исполнять желания тех, кто четко подпадает под целевую аудиторию и, вероятно, принесет прибыль в долгосрочной перспективе.
Согласно статистике Gartner [3], 80% прибыли компании генерирует 20% клиентов — на них и стоит сконцентрироваться. Угождать им выгодно — по данным консалтинговой компании Invesp [4], привлечение новых клиентов обходится в пять раз дороже, чем удержание старых. А сохранение 5% клиентов может увеличить прибыль до 95%.
Клиентоориентированными могут быть не только бизнесы, но и люди. Это один из самых важных гибких навыков (soft skills). Просто перенесите принципы подхода на свои отношения коллегами, работодателями, друзьями и знакомыми.
Например, если меняете работу, проанализируйте свою целевую аудиторию. Это будут HR, руководители отделов и директора. Подумайте, какие проблемы с соискателями у них бывают, как вы можете их решить. Изучайте аудитории разных сфер вашей жизни, помогайте удовлетворять запросы и закрывать проблемы этих людей.
Чем полезна клиентоориентированность
По данным Deloitte [5], клиентоориентированные компании на 60% прибыльнее тех, что не фокусируются на клиентах. А согласно статистике Forbes [6], 97% потребителей отмечают влияние качественного сервиса на лояльность к бизнесу. Бренды предоставляющие клиентам превосходный пользовательский опыт зарабатывают в 5,7 раза больше конкурентов, которые проигрывают по этому показателю.
Прибыль растет, потому что клиентоориентированность:
При этом клиентоориентированность — не панацея. Равняться только на потребителя нельзя по двум причинам.
Поэтому клиентоориентированный подход нужно применять с учетом многофакторности рынка и здравого смысла.
Примеры клиентоориентированности
В клиентоориентированных компаниях философию подхода чувствуют на каждом этапе: от удобного расположения кнопок на сайте до качества упаковки товара. Сейчас мы воспринимаем это как должное, но чтобы выгодно отстроиться от конкурентов, нужны уникальные кейсы.
Nordstrom и возврат чужих шин
В 1975 году мужчина купил зимние шины в шиномонтажной мастерской, но спустя несколько недель обнаружил дефект и решил их вернуть. Когда он подъехал к предполагаемой мастерской, обнаружил, что она закрыта, а на ее месте стоит магазин Nordstrom. Компания продавала обувь, модную одежду и товары для дома. Тем не менее мужчина не растерялся и объяснил ситуацию продавцу, а тот — принял его шины и вернул деньги [8].
Вывод. Возврат дорогого товара, который нельзя перепродать, выглядит абсурдно. Но если пренебречь небольшим финансовым ударом, в долгосрочной перспективе ситуация оказалась выгодной. Спустя полвека люди продолжают рассказывать эту историю, а если загуглить Nordstrom tires, вы найдете около 3 млн результатов. Теперь поведение продавца выглядит мудро, четко по методичке компании [9], в которой всего одно правило: «Используй здравый смысл в любой ситуации».
Эта история скорее исключение, чем правило. Регулярная работа в минус разорит компанию, но закладывая небольшой бюджет на подобную блажь для клиентов, действительно можно получить хороший PR-эффект. Особенно, если строить бренд вокруг сильного сервиса. Nordstrom регулярно получает один из наивысших уровней потребительской лояльности (NPS) [10]. По этому показателю компания даже обогнала Apple в 2018 году.
Casper и чат-бот для людей с бессонницей
Производитель матрасов Casper создал чат-бота [11], с которым можно поболтать бессонной ночью. Глава отдела коммуникаций Casper Линдси Каплан объясняет: «Мы хотели сделать бота, который делает 3 часа ночи не такими одинокими». Insomnobot 3000 шутит и поддерживает любимые темы людей с бессонницей: стресс, кофе и сериалы. Бот бесплатный, но помогает компании собирать номера телефонов клиентов, чтобы отправлять рекламные материалы.
Вывод. Casper — одна из немногих компаний, которая использовала чат-бот с измеримой пользой в виде PR-эффекта и сбора базы теплых контактов. Для этого достаточно приправить заботу о целевой аудитории актуальным трендом.
Например, один из клиентов забыл в гостинице зарядное устройство. Он обнаружил пропажу на следующий день, но не успел позвонить в отель, потому что получил посылку. Это был небольшой пакет с запиской: «Мистер Джулиус, я хотел убедиться, что вы получили посылку. Уверен, вам это нужно, и на всякий случай я отправил вам дополнительное зарядное устройство для ноутбука».
Вывод. Ошибка клиента — возможность впечатлить его продуманностью сервиса.
Так можно придумать бюджетные варианты решения проблем, которые возникают из-за неосмотрительности клиентов. Такие решения дают конкурентное преимущество и производят wow-эффект.
Пять принципов клиентоориентированности
Основа клиентоориентированности — интересы клиентов и их опыт взаимодействия с вами. Идеальная цель подхода — превратить всех клиентов в постоянных покупателей с растущим средним чеком, готовых рекомендовать компанию другим людям.
Всем сотрудникам не обязательно работать с клиентами напрямую. Но программист, специалист по работе с партнерами, упаковщик и охранник тоже могут быть проактивными приверженцами подхода. Вот пять принципов клиентоориентированности, о которых следует помнить.
Как определить клиентоориентирован ли бизнес
Чем довольнее клиент на каждом этапе путешествия с вашим брендом (Customer Journey Map), тем выше клиентоориентированность. Для каждого бизнеса карта путешествия клиента уникальна, но можно выделить пять базовых элементов.
Позиционирование и реклама
Сайт
Продукт
Поддержка
Логистика
Избегайте внедрения внешних библиотек в свой проект
Потенциальные проблемы
Я всячески рекомендую избегать добавления внешних библиотек в свой проект. Однако это не значит, что использовать библиотеки — зло, а Ваш Gradle файл вовсе должен быть очищен от любых внешних зависимостей! Я хочу донести мысль, что перед добавлением новой библиотеки нужно провести очень серьёзный анализ. Чтобы понять, как анализировать библиотеки, давайте рассмотрим с какими потенциальными проблемами Вы можете столкнуться при добавлении новой библиотеки в Ваш проект.
Размер приложения
Большинство библиотек не сильно увеличивают размер Вашего приложения. Но существуют такие либы, после добавления которых Ваше приложение увеличится в разы! Например, библиотека Realm может увеличить размер APK с 4MB до 12MB. В среднем приложение весит 100MB-200MB и лишние 8MB могут быть не заметны. Но не забывайте, что Realm не единственная библиотека, которая негативно влияет на размер APK. А можно ли уменьшить размер APK, используя эту зависимость? Да, можно сделать split apk по архитектурам процессора. Но это приводит к следующей проблеме (пункт 2).
Поддерживаемость кода
Проекты разрастаются, покрываются все большей логикой и разобраться порой в них становится все сложнее. Чтобы спустя нескольких лет развития проекта любой новый разработчик мог легко освоиться в проекте нужна четкая архитектура проекта. Однако некоторые библиотеки могут свести поддерживаемость проекта к нулю. Например, некорректная работа с EventBus может сильно запутать логику Вашего приложения. Тут важно четко разграничить: где и в каких кейсах Вы используете эту либу. А также быть уверенным, что никто и никогда не будет отклоняться от этих правил. Но что происходит на практике? Почти каждый разработчик, начиная работать с EventBus, использует его повсюду. В итоге проект становится абсолютно нечитаемым.
Время на изучение библиотеки
При добавлении новой библиотеки необходимо изучить как с ней взаимодействовать. Существуют библиотеки, которые могут очень негативно повлиять на скорость разработки в будущем.
Например, PagingLibrary от Google требует немалых усилий, чтобы понять как с ней взаимодействовать. Чтобы разобраться с этой библиотекой каждому новому разработчику потребуется от 12 до 20 часов. Вы теряете почти 3 дня! Как раз за эти 3 дня Вы можете запилить свою пагинацию и быть независимым от сторонних решений.
Скорость сборки
Скорость сборки современных приложений оставляет желать лучшего. Однако, если Вы хотите ещё больше увеличить время сборки — используйте Dagger! Не знаю почему библиотекой до сих пор активно пользуются после появления Kotlin. В большинстве случаев Dagger содержит все 4 проблемы, которые были описаны выше.
Баги, баги, баги…
На своем опыте в одном лишь проекте я выпиливал 5 библиотек из-за наличия в них багов. Помните, что в библиотеках почти всегда есть баги. Например:
Наличие уязвимостей в библиотеке
Знаете как проще всего взломать сразу несколько приложений, изучив лишь одни исходники? Нужно найти баг в крупной библиотеке, которая используется многими разработчиками. И через уязвимости этой либы получить доступ к данным вашего приложения. Если Вы не разрабатываете приложение, требующее повышенное внимание к безопасности пользователя, то можно на этот пункт закрыть глаза. В противном случае поищете issue, направленные на потенциальные уязвимости.
Поддержка библиотеки
Если библиотека не обновлялась уже год — задайте вопрос, стоит ли её использовать. Дело в том, что в библиотеках регулярно находятся баги. Если эти баги не исправляются, то стоит ли использовать эту библиотеку? Вполне возможно, что в ближайшем будущем вы наткнетесь на баг библиотеки и вам придется искать альтернативные пути реализации фичи. Есть некоторые библиотеки, которые должны адаптироваться под возможности текущей версии Android API. Например, если появился новый элемент в Android, то нужно добавить его поддержку. К таким библиотекам можно отнести Anko, который больше не поддерживается. Теперь использовать эту библиотеку в крупных проектах нет смысла.
Библиотека присутствует во всех слоях проекта
Такие библиотеки как RxJava или PagingLibrary заставляют разработчика использовать их API на каждом слое приложения. Если вы уверены, что библиотека всегда будет в проекте, то проблем нет. Но если вам по каким-то причинам придется выпиливать библиотеку, то вы затратите колоссальные усилия! Вам придется переписывать полпроекта.
Ограничения библиотеки
Каждая либа предоставляет API, который ограничен как наличием открытыми методами, так и внутренней реализацией. Убедитесь, что возможностей библиотеки вам полностью хватает. Например, популярная библиотека Android Navigation Component очень сильно связывает руки разработчика. Она не предоставляет методы show, hide, add (которые есть в FragmentTransaction). Помимо этого библиотека усложняет работу с BottomNavigationView при необходимости хранить историю табов.
Огромный Gradle файл с зависимостями
Когда я прихожу на новый проект, я первым делом смотрю зависимости в Gradle файл. Он даёт понять, что умеет делать приложение и как решаются те или иные задачи. Но вот было моё удивление, когда увидел, что для работы с сетью используются и OkHttp, и Retrofit, и Volley (форк). И это только работа с сетью. Сам Gradle файл состоит из огромного числа библиотек, поддержка которых уже давно закончилась. Когда разработчик один, он может держать весь проект в голове, но когда приходят новые разработчики разобраться в таком проекте становится крайне сложно.
Тонкости реализации кода библиотеки. Часть вторая
В предыдущей части был приведен способ, с помощью которого, можно сократить количество кода при использовании классов-помощников и классов из других пространств имен.
В данной статье речь пойдет о том, как можно реализовать размещение элементов библиотеки по файлам. Также будут затронуты вопросы подключения элементов библиотеки в пользовательском коде, и, конечно же, как «рабочие» пространства имен могут помочь в реализации библиотеки.
Подходы, применяемые при организации файлов библиотеки
Для начала определимся, что речь пойдет о библиотеках, весь код которых поставляется в виде заголовочных файлов. При создании структуры файлов в таких библиотеках придерживаются ряда правил. Не все из них можно назвать «стандартными», но применение представленных правил в существующих библиотеках не такое и редкое явление.
1) Заголовочные файлы библиотеки обычно размещают в отдельной папке.
Название папки содержит имя библиотеки или пространства имен, используемого в библиотеке. Это позволяет в пользовательском коде «документировать» использование библиотеки:
2) Файлы, содержащие «пользовательские» типы, и файлы, предоставляющие детали реализации, желательно размещать в разных папках.
Под «пользовательскими» типами понимаются типы, определяемые библиотекой и предоставляемые пользователю для использования в своем коде.
Применение данного правила со стороны разработчика библиотеки позволяет пользователю библиотеки легко определить файлы, которые ему необходимы для включения в своем проекте без чтения сопутствующей документации.
Для примера, некоторые библиотеки boost размещают файлы реализации во вложенной папке detail.
3) Для каждого класса библиотеки нередко создается отдельный файл с одноименным названием.
Такой подход позволяет пользователю библиотеки легко разобраться в ее структуре, а разработчику предоставляет простоту навигации по классам в своей библиотеке.
4) Файлы библиотеки должны быть самодостаточными.
В основном, это касается тех файлов, в которых определяются «пользовательские» типы и которые пользователь библиотеки подключает в своей программе или другой библиотеке посредством #include.
Подробней об этом правиле можно почитать в книге «Стандарты программирования на C++» Г.Саттера и А.Александреску (правило 23).
Описание тестовой библиотеки
Далее предположим, что нам необходимо реализовать некоторую библиотеку SomeLib. Эта библиотека должна предоставлять пользователю классы A_1, A_2 и A_3, реализующие некоторый функционал. Зеленой областью на рисунке представлена сама библиотека, красной — пространство имен, а синими — классы, предоставляемые пользователю.
Пусть библиотека SomeLib имеет зависимость от библиотеки STL и содержит «невидимые» пользователю вспомогательные классы I_1 и I_2, которые на рисунке представлены оранжевым цветом. Стрелками указаны зависимости классов от других. Например, класс A_1 зависит от классов list, vector и I_1. Под зависимостями класса в данном случае понимается использование им других классов при описании своих данных, функций-членов или реализации этих функций.
Предположим, что библиотека поставляется в виде заголовочных файлов и в качестве одного из файлов содержит config.hpp, описывающий некоторые «управляющие» структуры.
Реализация тестовой библиотеки с использованием представленных правил
При реализации библиотеки воспользуемся стандартным подходом, описанным в предыдущей части. Пользовательские классы будем размещать в пространстве имен библиотеки some_lib, а служебные классы во вложенном пространстве имен impl.
Библиотека будет размещаться в папке some_lib. В этой папке будут файлы A_*.hpp, описывающие «пользовательские» типы. Файлы I_*.hpp, содержащие служебные классы, будем размещать во вложенной папке impl.
Теперь можно приступить к реализации. Пропустим описание процесса кодирования и сразу перейдем к результатам.
Пользователь теперь может использовать нашу библиотеку, подключив один или несколько заголовочных файлов.
Замечания по реализации тестовой библиотеки
Для незначительного сокращения кода вместо стандартно применяемых «стражей» включения и реализующихся через #ifndef, #define, #endif, в заголовочных файлах можно использовать #pragma once. Но данный способ работает не на всех компиляторах и, поэтому, не всегда применим.
Наша библиотека содержит относительно простую схему связей между элементами. Во что выливается разработчику библиотеки реализация более сложных зависимостей представить нетрудно.
Стоит отметить еще один интересный момент. При включении только одного заголовочного файла some_lib/A_3.hpp пользователь фактически подключает больше половины библиотеки (если быть более точным, то 4/6 исходных файлов).
А если теперь задаться вопросом: действительно ли, так необходимо реализовывать для пользователя библиотеки возможность подключения отдельных ее элементов?
Основным аргументом в пользу ответа «Да» будет то, что данный подход позволит сократить время компиляции при подключении отдельных элементов по сравнению с временем компиляции при полном включении всех элементов библиотеки. Если связей между элементами библиотеки почти нет (не наш случай), то это действительно так. А если связей немало — ответ неоднозначный. При обдумывании ответа стоит вспомнить о том, что «стражи» включения и директивы #include на этапе обработки исходных файлов препроцессором в ходе компиляции имеют ненулевые временные издержки.
Предположим, что ответ на этот вопрос «Нет». Вот здесь-то и начинается самое интересное…
Реализация тестовой библиотеки, использующей единственную точку подключения
Пользователю для подключения библиотеки теперь необходима всего одна строчка кода:
Теперь остановимся на моментах реализации, которые может применить разработчик библиотеки:
1) Поскольку имеется только одна точка подключения библиотеки (файл some_lib/include.hpp), разработчик библиотеки может избавиться от всех «стражей» включения, кроме одного — в файле подключения всей библиотеки.
2) Каждый файл «пользовательского» класса или класса-элемента реализации теперь не обязан содержать включения файлов, содержащих зависимые элементы.
3) Применение «рабочих» пространств имен позволяет избавиться от задания пространств имен в каждом файле.
Поскольку файл для подключения библиотеки пользователем только один, то можно пересмотреть структуру файлов библиотеки.
Реализация библиотеки теперь может выглядеть следующим образом:
Заключение
Описывать достоинства и недостатки представленного подхода к реализации, думаю, нет смысла — код сам говорит за себя. Каждый разработчик самостоятельно решит какую схему при реализации кода библиотеки он для себя выберет, взвесив при этом все «за» и «против».
А если внимательно присмотреться к представленной схеме, то есть ощущение чего-то знакомого. Но об этом не сейчас…