Kohana

Поделись знанием:
Перейти к: навигация, поиск
Kohana
Тип

Программный каркас для создания веб-приложений

Разработчик

Kohana Team[1]

Написана на

PHP

Операционная система

Кроссплатформенный

Последняя версия

3.3.6[2] (25 июля 2016)

Лицензия

BSD

Сайт

[kohanaframework.org ramework.org]

К:Википедия:Статьи без изображений (тип: не указан)

Kohana (ранее англ. Blue Flame — «Голубое пламя») — PHP5 веб-фреймворк с открытым кодом, который использует архитектурную модель HMVC (Hierarchical Model View Controller — Иерархические Модель-Контроллер-Вид). Его цели — быть безопасным, лёгким и простым в использовании[3].

Электронный журнал для веб-разработчиков PHP Inside признал Kohana «выбором редакции … за архитектуру, быстроту и сообщество»[4]





История

Проект Kohana был создан как ветвь PHP фреймворка CodeIgniter под именем Blue Flame[5]. Главной причиной форка был переход к более открытой для общественности модели разработки, потому, что многие пользователи были недовольны скоростью разработки и исправления ошибок в CodeIgniter. Rick Ellis — создатель и владелец CodeIgniter — был счастлив видеть форк своего проекта, но помогать отказался; он подтолкнул новый проект к созданию собственной документации и посоветовал переименовать проект.[6] В июле 2007 Blue Flame был переименован в Kohana для того, чтобы избежать проблем с авторскими правами в будущем[7].

Название Kohana было выбрано, когда разработчики начали просматривать словари коренных американцев для того, чтобы выбрать слово, не нарушающее авторские права. Kohana на языке Сиу значит «быстрый».

В апреле 2014 года главный разработчик shadowhand заявил,[8] что развитие проекта завершено, однако фреймворк продолжает разрабатываться и поддерживаться сообществом[9], а на официальном сайте продолжают выходить обновления.

Особенности

  • Высокая безопасность
  • Хорошо прокомментированный код и встроенные средства отладки и профилирования
  • Прост в понимании
  • Использует парадигму HMVC
  • Поддержка UTF-8
  • Очень легко расширяем
  • Распространяется по лицензии BSD

Технологии

Версии

Ветви разработки

В настоящее время параллельно разрабатываются три ветви[10]:

  • Ветвь 3.1.x. Последняя стабильная версия 3.1.5 (поддержка закончена).
  • Ветвь 3.2.x. Последняя стабильная версия 3.2.2. (поддержка закончена).
  • Ветвь 3.3.x. Рекомендуется для вновь разрабатываемых приложений[10]. Текущая стабильная версия 3.3.0. Официальная поддержка до ноября 2013 г. В данной ветке продолжена переработка механизма «запрос-ответ» (Request/Response), особенно в части HMVC-запросов, изменения в роутинге (фильтры, см. [dev.kohanaframework.org/issues/4388 #4388] (англ.))

Различия между версиями

Отличие Kohana от CodeIgniter

  • Строгое PHP5 ООП. Предполагает много плюсов: защита видимости, автоматическая подгрузка классов, перегрузка свойств и методов, интерфейсы, абстрактные классы, и применение паттерна одиночка (singleton).
  • Kohana присоединилась к инициативе GoPHP5. Все релизы после 2.2 будут соответствовать этим правилам.
  • Сохранен стиль CodeIgniter. Любой, кто использовал CodeIgniter, быстро поймет структуру Kohana.
  • Управляется сообществом, не компанией. Kohana управляется дискуссиями, идеями и кодом сообщества. Разработчики Kohana из всех уголков света, каждый со своим собственным талантом. Это позволяет ускорить и сделать более гибким цикл разработки в котором реагирование на проблемы занимает часы, вместо дней или месяцев.
  • Массивы GET, POST, COOKIE, и SESSION работают как предполагается. Kohana не ограничивает доступ к глобальным переменным, но предоставляет ту же фильтрацию и XSS защиту, что и CodeIgniter.
  • Каскадные ресурсы, модули и наследование. Контроллеры, модели, библиотеки, хелперы, и виды могут быть загружены из любого места вашей системы, приложения, или модуля. Опции конфигурации наследуемы и могут динамически перезаписываться каждым приложением.
  • Нет конфликтов пространств имён. Суффиксы классов, как «_Controller», используются для предотвращения конфликтов пространства имён. Это позволяет пользовательским контроллерам и моделям загружаться в одно и то же время.
  • Настоящая автозагрузка классов. Действует для библиотек, контроллеров, моделей, и хелперов. Это не предзагрузка, а настоящая динамическая подгрузка классов при их инициализации.
  • Хелперы — статические классы, не функции. Для примера, вместо использования «form_open()», вы можете использовать «form::open()».
  • Связанность драйверов библиотек и API.
  • Мощный обработчик событий. В Kohana события могут быть динамически добавлены, заменены или, даже, удалены. Это позволяет вносить значительные изменения в процесс работы Kohana, без модификации существующего системного кода.

Отличие Kohana 3 от Kohana 2.х

Версии 2.х и 3 фреймворка Kohana следует рассматривать[11] как разные фреймворки. Основные отличия версии 3 по сравнению с 2.х:

  • Изменена организация файловой системы. Все классы выделены в директорию classes с подкаталогами model и controller для моделей и контроллеров соответственно. Библиотеки и хэлперы в Kohana 3.x хранятся вместе и по сути теперь не отличаются друг от друга.
  • Единое правило именования классов. Имя любого класса должно соответствовать директории, в которой расположен файл этого класса (например, класс Model_Foo_Bar должен располагаться в файле classes\model\foo\bar.php).
  • Часть функциональности ядра вынесена в отдельные модули (например, Database, ORM), которые можно отключать.
  • Больший контроль над кодом, выполняемым до загрузки фреймворка. В связи с этим из ядра фреймворка были удалены события (Events) и хуки (Hooks).
  • Новый механизм роутинга.
  • Значительные изменения в слоях Database и ORM.
  • Можно запустить любой контроллер и получить его вывод не только по HTTP, но и прямо из кода (указав роут), минуя протокол HTTP. Это позволяет вынести независимые блоки генерируемого контента в отдельные контроллеры, а также упрощает клиент-серверное взаимодействие в AJAX[12][13].

Отличие Kohana 3.1 от Kohana 3.0

В ветке 3.1.x произошло разделение объекта Request на отдельные классы Request и Response. Кроме того, валидация теперь также распределена между классами Validation (управление ходом валидации) и Valid (набор стандартных статических правил, аналогично классу Valid в Kohana 2.3.4). Более подробно об основных изменениях можно почитать в [kohanaframework.org/3.1/guide/kohana/upgrading официальной документации] (англ.).

Отличие Kohana 3.2 от Kohana 3.1

Основным изменением в ветке 3.2.x стала переработка механизма работы с конфигурационными файлами. Появились классы Kohana_Config_Reader и Kohana_Config_Writer, позволяющие на их основе реализовывать собственные драйверы для работы с различными источниками данных (файлы, СУБД и т. д.). Кроме того, HTTP-кеширование, появившееся в 3.1.x, было вынесено из класса Request в отдельный класс HTTP_Cache модуля Cache.

Отличие Kohana 3.3 от Kohana 3.2

В ветке 3.3.x было принято решение о переходе на стандарт [github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md PSR-0] (англ.). В связи с этим все имена директорий и файлов классов должны начинаться с большой буквы. Кроме того, осуществлен целый ряд изменений по повышению изоляции HMVC-запросов, обработке ошибок выполнения запросов и т. д. Добавлен новый модуль Minion для выполнения Cron-задач.

История версий

Цвет Описание
Красный Старая версия; не поддерживается
Жёлтый Старая версия; всё ещё поддерживается
Зелёный Текущая версия
Голубой Планируемая версия
Название Версия Кодовое имя Подверсия Дата релиза Существенные изменения
BlueFlame 1.0 1.0 2007-05-31[14]
  • Первоначальный релиз
  • Форк от CodeIgniter 1.5.4 (предварительный релиз, ревизия 566 в svn)[14]
Kohana 2.0 Superlime 2.0 2007-11-08[15]
  • Код полностью переписан, нет старого унаследованного кода[7][15]
  • Прекращена совместимость с PHP4, ориентация на PHP5[7]
  • Полностью объектно-ориентированный программный каркас[7]
  • В поставку включены модули[7]
  • Концепция каскадных ресурсов[7]
2.1 Schneefeier 2.1.0 2008-02-05[15]
  • Новые библиотеки: Cache, Image, ORM, Payment
  • Новые хелперы: num, expires, email, html::link(), html::breadcrumb(), arr::binary_search(), valid::standard_text(), text::widont();
  • Новые модули: Auth & Forge; драйверы PostgreSQL и MySQLi
  • Компрессия вывода gzip, исправления ошибок и изменения в API[16]
2.1.1 2008-02-06[15]
  • Исправлена ошибка расширения хелперов
  • Добавлены английский (UK), немецкий и македонский языки[17]
2.1.2 2008-06-10
  • Добавлена константа KOHANA_IS_WIN, которая сигнализирует о работе на платформе Windows
  • Многочисленные исправления ошибок[18]
2.2 Efímera 2.2.0 2008-08-08
  • Новые библиотеки (Captcha)
  • Новые хелперы (upload, format, и т. д.)
  • Новые атрибуты конфигурации,
  • Новые драйверы (MSSQL, PayPal Pro)
  • Чистка кода, оптимизация и исправления ошибок[19]
2.3 Kernachtig 2.3.0 2008-12-20
  • Новый роутер
  • Новая библиотека баз данных (object_db)
2.3.1 2009
2.3.2 2009
Aegolius 2.3.3 2009-05-31
Buteo Regalis 2.3.4 2009-06-05
2.4 - 2.4-RC1 2009-11-19[20]

Планировалась как логичное продолжение ветки 2.3, но ввиду выпуска версии 3.0 так и не была доведена до стабильного релиза.

[kohanaframework.org/3.0/guide/ 3.0] renaissance [dev.kohanaframework.org/attachments/download/1328/kohana-v3.0.zip 3.0.0] 2009-09-17[21]
  • Код полностью переписан. Нет совместимости с приложениями, написанными для 2.х
  • Архитектура соответствует шаблону проектирования HMVC
  • Добавлена новая функциональность ядра
  • Все хелперы и библиотеки являются классами в папке classes (без директорий helpers/libraries)
[dev.kohanaframework.org/attachments/download/1382/kohana-v3.0.1.2.zip 3.0.1] 2009-10-16[22]
[dev.kohanaframework.org/attachments/download/1445/kohana-3.0.2.1.zip 3.0.2] 2009-11-21[23]
[dev.kohanaframework.org/attachments/download/1446/kohana-3.0.3.zip 3.0.3] 2009-11-23[24]
wyau cwningen [dev.kohanaframework.org/attachments/download/1548/kohana-3.0.4.2.zip 3.0.4] 2010-04-04[25]
[dev.kohanaframework.org/attachments/download/1561/kohana-3.0.5.zip 3.0.5] 2010-05-25[26]
sumar hiti [dev.kohanaframework.org/attachments/download/1569/kohana-3.0.6.2.zip 3.0.6] 2010-06-07[27]
hattrick [dev.kohanaframework.org/attachments/download/1596/kohana-3.0.7.1.zip 3.0.7] 2010-07-11[28]
großen jäger [dev.kohanaframework.org/attachments/download/1601/kohana-3.0.8.zip 3.0.8] 2010-09-22[29]
nya året [dev.kohanaframework.org/attachments/download/1628/kohana-3.0.9.zip 3.0.9] 2010-12-30[30]
Hierofalco [dev.kohanaframework.org/attachments/download/1649/kohana-3.0.10.zip 3.0.10] 2011-03-13[31]
vespertinus [dev.kohanaframework.org/attachments/download/1655/kohana-3.0.11.zip 3.0.11] 2011-05-02[32]
cuvierii [dev.kohanaframework.org/attachments/download/1668/kohana-3.0.12.zip 3.0.12] 2011-07-24[33]
[kohanaframework.org/3.1/guide/ 3.1] merle [dev.kohanaframework.org/attachments/download/1640/kohana-3.1.zip 3.1.0] 2011-02-07[34]
  • Усовершенствована работа Request/Response
  • В валидацию добавлены контексты
  • Удален модуль Pagination
aesalon [dev.kohanaframework.org/attachments/download/1643/kohana-3.1.1.1.zip 3.1.1] 2011-02-16
Hirondelle [dev.kohanaframework.org/attachments/download/1650/kohana-3.1.2.zip 3.1.2] 2011-04-14[31]
araea [dev.kohanaframework.org/attachments/download/1656/kohana-3.1.3.1.zip 3.1.3] 2011-05-02[32]
fasciinucha [dev.kohanaframework.org/attachments/download/1671/kohana-3.1.4.zip 3.1.4] 2011-07-24[33]
biarmicus [dev.kohanaframework.org/attachments/download/1697/kohana-3.1.5.zip 3.1.5] 2012-08-31[35]
[kohanaframework.org/3.2/guide/ 3.2] Kolibri [dev.kohanaframework.org/attachments/download/1670/kohana-3.2.0.zip 3.2.0] 2011-07-24[33]
  • Дальнейшая доработка механизма Request/Response
  • Изменен принцип работы с конфигурационными файлами (драйверы на основе классов Kohana_Config_Reader и Kohana_Config_Writer)
Milvago [dev.kohanaframework.org/attachments/download/1703/kohana-3.2.1.zip 3.2.1] 2012-08-27[35]
hypoleucos [github.com/downloads/kohana/kohana/kohana-3.2.2.zip 3.2.2] 2012-08-31[36]
[kohanaframework.org/3.3/guide/ 3.3] badius [github.com/downloads/kohana/kohana/kohana-3.3.0.zip 3.3.0] 2012-10-23[37]
  • Переход на стандарт [github.com/php-fig/fig-standards/blob/master/accepted/PSR-0.md PSR-0]
  • Повышение изолированности HMVC-запросов (Request)
  • Более удобная система обработки исключений
  • Добавлен модуль Minion а также модуль phpunit

Напишите отзыв о статье "Kohana"

Примечания

  1. [kohanaframework.org/team Who makes Kohana?] (англ.)
  2. [github.com/kohana/kohana/releases Страница загрузки Kohana] (англ.)
  3. [docs.kohanaphp.com/overview overview [Kohana User Guide]]
  4. [phpinside.ru/?q=node/841 Современные PHP-фреймворки — полный список лидеров]
  5. [php.devreview.com/php-news-kohana-fork-from-codeigniter Kohana fork from CodeIgniter] (англ.). PHP devReview() (19 июня 2007 г.). [www.webcitation.org/6665jvMVE Архивировано из первоисточника 12 марта 2012].
  6. [codeigniter.com/forums/viewthread/53347/P30/#260782 Форум CodeIgniter], июнь 2007 г.
  7. 1 2 3 4 5 6 [docs.kohanaphp.com/overview/history Kohana User Guide] (недоступная ссылка с 16-03-2016 (2962 дня))
  8. [forum.kohanaframework.org/discussion/12509/final-releases-of-kohana-beginning-of-ohanzee Final releases of Kohana / Beginning of Ohanzee]
  9. [github.com/kohana Репозиторий проекта на Github].
  10. 1 2 [github.com/kohana/kohana kohana/kohana]. GitHub. Проверено 16 августа 2016.
  11. [kerkness.ca/kowiki/doku.php?id=what_version_of_kohana_should_i_use Kohana 3.x vs 2.x]
  12. [habrahabr.ru/post/70164/ KO3: HMVC и роутинг]
  13. [kupreev.com/page/simple-hmvc-widget-kohana3 Делаем простой HMVC-виджет в Kohana3]
  14. 1 2 [codeigniter.com/forums/viewthread/53347/ BlueFlame 1.0 Released! | CodeIgniter Forums]
  15. 1 2 3 4 [docs.kohanaphp.com/changelog changelog [Kohana User Guide]]
  16. [docs.kohanaphp.com/changelog/2.1 changelog:2.1 [Kohana User Guide]]
  17. [docs.kohanaphp.com/changelog/2.1.1 changelog:2.1.1 [Kohana User Guide]]
  18. [docs.kohanaphp.com/changelog/2.1.2 changelog:2.1.2 [Kohana User Guide]]
  19. [docs.kohanaphp.com/changelog/2.2 changelog:2.2 [Kohana User Guide]]
  20. [forum.kohanaframework.org/discussion/4014/2-4-release-candidate-1-released 2.4 Release Candidate 1 Released [Kohana Forums]]
  21. [forum.kohanaframework.org/discussion/3479/kohana-v3-0-released Kohana v3.0 Released! [Kohana Forums]]
  22. [forum.kohanaframework.org/discussion/3787/kohana-v3-0-1-released Kohana v3.0.1 Released! [Kohana Forums]]
  23. [forum.kohanaframework.org/discussion/4119/kohana-v3-0-2-released Kohana v3.0.2 Released! [Kohana Forums]]
  24. [forum.kohanaframework.org/discussion/4144/kohana-v3-0-3-released Kohana v3.0.3 Released! [Kohana Forums]]
  25. [forum.kohanaframework.org/discussion/5299/kohana-v3-0-4-released Kohana v3.0.4 Released! [Kohana Forums]]
  26. [forum.kohanaframework.org/discussion/5821/kohana-v3-0-5-released Kohana v3.0.5 Released! [Kohana Forums]]
  27. [forum.kohanaframework.org/discussion/5937/kohana-v3-0-6-released Kohana v3.0.6 Released! [Kohana Forums]]
  28. [forum.kohanaframework.org/discussion/6209/kohana-v3-0-7-released Kohana v3.0.7 Released! [Kohana Forums]]
  29. [forum.kohanaframework.org/discussion/6867/kohana-v3-0-8-released Kohana v3.0.8 Released! [Kohana Forums]]
  30. [forum.kohanaframework.org/discussion/7699/kohana-v3-0-9-released Kohana v3.0.9 Released! [Kohana Forums]]
  31. 1 2 [forum.kohanaframework.org/discussion/8418/kohana-3-1-2-kohana-3-0-10-released Kohana 3.1.2 & Kohana 3.0.10 Released! [Kohana Forums]]
  32. 1 2 [forum.kohanaframework.org/discussion/8886/kohana-3-1-3-kohana-3-0-11-released Kohana 3.1.3 & Kohana 3.0.11 Released! [Kohana Forums]]
  33. 1 2 3 [forum.kohanaframework.org/discussion/9380/kohana-3-2-0-3-1-4-3-0-12-released Kohana 3.2.0, 3.1.4, 3.0.12 Released! [Kohana Forums]]
  34. [forum.kohanaframework.org/discussion/8024/kohana-v3-1-0-released Kohana v3.1.0 Released! [Kohana Forums]]
  35. 1 2 [forum.kohanaframework.org/discussion/11041/kohana-v3-2-1-and-3-1-5-released Kohana v3.2.1 (and 3.1.5) released! [Kohana Forums]]
  36. [forum.kohanaframework.org/discussion/11050/kohana-v3-2-2-released Kohana v3.2.2 Released! [Kohana Forums]]
  37. [forum.kohanaframework.org/discussion/11191/kohana-3-3-0-released Kohana 3.3.0 Released! [Kohana Forums]]

Ссылки

  • [kohanaframework.org/ Официальный сайт Kohana Web Framework]  (англ.)
  • [kohanaframework.org/documentation Документация для различных версий]  (англ.)
  • [forum.kohanaframework.org/ Официальный форум Kohana Web Framework]  (англ.)
  • Cristian Gilè. [net.tutsplus.com/tutorials/php/kohana-the-swift-php-framework/ Kohana: The Swift PHP Framework] (англ.). Net Tuts + (9 июля 2009 г.). [www.webcitation.org/6665klEYp Архивировано из первоисточника 12 марта 2012].
  • [forum.kohanaframework.org/categories/russkoyazychnoe-soobschestvo Русскоязычная категория официального форума Kohana]
  • [habrahabr.ru/hub/kohanaphp/ habrahabr.ru/hub/kohanaphp] — Kohana на Хабрахабре
  • [blog.nagaychenko.com/category/kohana/ Статьи по работе с Kohana 3]
  • [kohanaframework.su/ Уроки и документация по Kohana 3.2]  (рус.)

Отрывок, характеризующий Kohana

– Да, приехал к вам, батюшка, и с беременною женой, – сказал князь Андрей, следя оживленными и почтительными глазами за движением каждой черты отцовского лица. – Как здоровье ваше?
– Нездоровы, брат, бывают только дураки да развратники, а ты меня знаешь: с утра до вечера занят, воздержен, ну и здоров.
– Слава Богу, – сказал сын, улыбаясь.
– Бог тут не при чем. Ну, рассказывай, – продолжал он, возвращаясь к своему любимому коньку, – как вас немцы с Бонапартом сражаться по вашей новой науке, стратегией называемой, научили.
Князь Андрей улыбнулся.
– Дайте опомниться, батюшка, – сказал он с улыбкою, показывавшею, что слабости отца не мешают ему уважать и любить его. – Ведь я еще и не разместился.
– Врешь, врешь, – закричал старик, встряхивая косичкою, чтобы попробовать, крепко ли она была заплетена, и хватая сына за руку. – Дом для твоей жены готов. Княжна Марья сведет ее и покажет и с три короба наболтает. Это их бабье дело. Я ей рад. Сиди, рассказывай. Михельсона армию я понимаю, Толстого тоже… высадка единовременная… Южная армия что будет делать? Пруссия, нейтралитет… это я знаю. Австрия что? – говорил он, встав с кресла и ходя по комнате с бегавшим и подававшим части одежды Тихоном. – Швеция что? Как Померанию перейдут?
Князь Андрей, видя настоятельность требования отца, сначала неохотно, но потом все более и более оживляясь и невольно, посреди рассказа, по привычке, перейдя с русского на французский язык, начал излагать операционный план предполагаемой кампании. Он рассказал, как девяностотысячная армия должна была угрожать Пруссии, чтобы вывести ее из нейтралитета и втянуть в войну, как часть этих войск должна была в Штральзунде соединиться с шведскими войсками, как двести двадцать тысяч австрийцев, в соединении со ста тысячами русских, должны были действовать в Италии и на Рейне, и как пятьдесят тысяч русских и пятьдесят тысяч англичан высадятся в Неаполе, и как в итоге пятисоттысячная армия должна была с разных сторон сделать нападение на французов. Старый князь не выказал ни малейшего интереса при рассказе, как будто не слушал, и, продолжая на ходу одеваться, три раза неожиданно перервал его. Один раз он остановил его и закричал:
– Белый! белый!
Это значило, что Тихон подавал ему не тот жилет, который он хотел. Другой раз он остановился, спросил:
– И скоро она родит? – и, с упреком покачав головой, сказал: – Нехорошо! Продолжай, продолжай.
В третий раз, когда князь Андрей оканчивал описание, старик запел фальшивым и старческим голосом: «Malbroug s'en va t en guerre. Dieu sait guand reviendra». [Мальбрук в поход собрался. Бог знает вернется когда.]
Сын только улыбнулся.
– Я не говорю, чтоб это был план, который я одобряю, – сказал сын, – я вам только рассказал, что есть. Наполеон уже составил свой план не хуже этого.
– Ну, новенького ты мне ничего не сказал. – И старик задумчиво проговорил про себя скороговоркой: – Dieu sait quand reviendra. – Иди в cтоловую.


В назначенный час, напудренный и выбритый, князь вышел в столовую, где ожидала его невестка, княжна Марья, m lle Бурьен и архитектор князя, по странной прихоти его допускаемый к столу, хотя по своему положению незначительный человек этот никак не мог рассчитывать на такую честь. Князь, твердо державшийся в жизни различия состояний и редко допускавший к столу даже важных губернских чиновников, вдруг на архитекторе Михайле Ивановиче, сморкавшемся в углу в клетчатый платок, доказывал, что все люди равны, и не раз внушал своей дочери, что Михайла Иванович ничем не хуже нас с тобой. За столом князь чаще всего обращался к бессловесному Михайле Ивановичу.
В столовой, громадно высокой, как и все комнаты в доме, ожидали выхода князя домашние и официанты, стоявшие за каждым стулом; дворецкий, с салфеткой на руке, оглядывал сервировку, мигая лакеям и постоянно перебегая беспокойным взглядом от стенных часов к двери, из которой должен был появиться князь. Князь Андрей глядел на огромную, новую для него, золотую раму с изображением генеалогического дерева князей Болконских, висевшую напротив такой же громадной рамы с дурно сделанным (видимо, рукою домашнего живописца) изображением владетельного князя в короне, который должен был происходить от Рюрика и быть родоначальником рода Болконских. Князь Андрей смотрел на это генеалогическое дерево, покачивая головой, и посмеивался с тем видом, с каким смотрят на похожий до смешного портрет.
– Как я узнаю его всего тут! – сказал он княжне Марье, подошедшей к нему.
Княжна Марья с удивлением посмотрела на брата. Она не понимала, чему он улыбался. Всё сделанное ее отцом возбуждало в ней благоговение, которое не подлежало обсуждению.
– У каждого своя Ахиллесова пятка, – продолжал князь Андрей. – С его огромным умом donner dans ce ridicule! [поддаваться этой мелочности!]
Княжна Марья не могла понять смелости суждений своего брата и готовилась возражать ему, как послышались из кабинета ожидаемые шаги: князь входил быстро, весело, как он и всегда ходил, как будто умышленно своими торопливыми манерами представляя противоположность строгому порядку дома.
В то же мгновение большие часы пробили два, и тонким голоском отозвались в гостиной другие. Князь остановился; из под висячих густых бровей оживленные, блестящие, строгие глаза оглядели всех и остановились на молодой княгине. Молодая княгиня испытывала в то время то чувство, какое испытывают придворные на царском выходе, то чувство страха и почтения, которое возбуждал этот старик во всех приближенных. Он погладил княгиню по голове и потом неловким движением потрепал ее по затылку.
– Я рад, я рад, – проговорил он и, пристально еще взглянув ей в глаза, быстро отошел и сел на свое место. – Садитесь, садитесь! Михаил Иванович, садитесь.
Он указал невестке место подле себя. Официант отодвинул для нее стул.
– Го, го! – сказал старик, оглядывая ее округленную талию. – Поторопилась, нехорошо!
Он засмеялся сухо, холодно, неприятно, как он всегда смеялся, одним ртом, а не глазами.
– Ходить надо, ходить, как можно больше, как можно больше, – сказал он.
Маленькая княгиня не слыхала или не хотела слышать его слов. Она молчала и казалась смущенною. Князь спросил ее об отце, и княгиня заговорила и улыбнулась. Он спросил ее об общих знакомых: княгиня еще более оживилась и стала рассказывать, передавая князю поклоны и городские сплетни.
– La comtesse Apraksine, la pauvre, a perdu son Mariei, et elle a pleure les larmes de ses yeux, [Княгиня Апраксина, бедняжка, потеряла своего мужа и выплакала все глаза свои,] – говорила она, всё более и более оживляясь.
По мере того как она оживлялась, князь всё строже и строже смотрел на нее и вдруг, как будто достаточно изучив ее и составив себе ясное о ней понятие, отвернулся от нее и обратился к Михайлу Ивановичу.
– Ну, что, Михайла Иванович, Буонапарте то нашему плохо приходится. Как мне князь Андрей (он всегда так называл сына в третьем лице) порассказал, какие на него силы собираются! А мы с вами всё его пустым человеком считали.
Михаил Иванович, решительно не знавший, когда это мы с вами говорили такие слова о Бонапарте, но понимавший, что он был нужен для вступления в любимый разговор, удивленно взглянул на молодого князя, сам не зная, что из этого выйдет.
– Он у меня тактик великий! – сказал князь сыну, указывая на архитектора.
И разговор зашел опять о войне, о Бонапарте и нынешних генералах и государственных людях. Старый князь, казалось, был убежден не только в том, что все теперешние деятели были мальчишки, не смыслившие и азбуки военного и государственного дела, и что Бонапарте был ничтожный французишка, имевший успех только потому, что уже не было Потемкиных и Суворовых противопоставить ему; но он был убежден даже, что никаких политических затруднений не было в Европе, не было и войны, а была какая то кукольная комедия, в которую играли нынешние люди, притворяясь, что делают дело. Князь Андрей весело выдерживал насмешки отца над новыми людьми и с видимою радостью вызывал отца на разговор и слушал его.
– Всё кажется хорошим, что было прежде, – сказал он, – а разве тот же Суворов не попался в ловушку, которую ему поставил Моро, и не умел из нее выпутаться?
– Это кто тебе сказал? Кто сказал? – крикнул князь. – Суворов! – И он отбросил тарелку, которую живо подхватил Тихон. – Суворов!… Подумавши, князь Андрей. Два: Фридрих и Суворов… Моро! Моро был бы в плену, коли бы у Суворова руки свободны были; а у него на руках сидели хофс кригс вурст шнапс рат. Ему чорт не рад. Вот пойдете, эти хофс кригс вурст раты узнаете! Суворов с ними не сладил, так уж где ж Михайле Кутузову сладить? Нет, дружок, – продолжал он, – вам с своими генералами против Бонапарте не обойтись; надо французов взять, чтобы своя своих не познаша и своя своих побиваша. Немца Палена в Новый Йорк, в Америку, за французом Моро послали, – сказал он, намекая на приглашение, которое в этом году было сделано Моро вступить в русскую службу. – Чудеса!… Что Потемкины, Суворовы, Орловы разве немцы были? Нет, брат, либо там вы все с ума сошли, либо я из ума выжил. Дай вам Бог, а мы посмотрим. Бонапарте у них стал полководец великий! Гм!…
– Я ничего не говорю, чтобы все распоряжения были хороши, – сказал князь Андрей, – только я не могу понять, как вы можете так судить о Бонапарте. Смейтесь, как хотите, а Бонапарте всё таки великий полководец!
– Михайла Иванович! – закричал старый князь архитектору, который, занявшись жарким, надеялся, что про него забыли. – Я вам говорил, что Бонапарте великий тактик? Вон и он говорит.
– Как же, ваше сиятельство, – отвечал архитектор.
Князь опять засмеялся своим холодным смехом.
– Бонапарте в рубашке родился. Солдаты у него прекрасные. Да и на первых он на немцев напал. А немцев только ленивый не бил. С тех пор как мир стоит, немцев все били. А они никого. Только друг друга. Он на них свою славу сделал.
И князь начал разбирать все ошибки, которые, по его понятиям, делал Бонапарте во всех своих войнах и даже в государственных делах. Сын не возражал, но видно было, что какие бы доводы ему ни представляли, он так же мало способен был изменить свое мнение, как и старый князь. Князь Андрей слушал, удерживаясь от возражений и невольно удивляясь, как мог этот старый человек, сидя столько лет один безвыездно в деревне, в таких подробностях и с такою тонкостью знать и обсуживать все военные и политические обстоятельства Европы последних годов.
– Ты думаешь, я, старик, не понимаю настоящего положения дел? – заключил он. – А мне оно вот где! Я ночи не сплю. Ну, где же этот великий полководец твой то, где он показал себя?
– Это длинно было бы, – отвечал сын.
– Ступай же ты к Буонапарте своему. M lle Bourienne, voila encore un admirateur de votre goujat d'empereur! [вот еще поклонник вашего холопского императора…] – закричал он отличным французским языком.
– Vous savez, que je ne suis pas bonapartiste, mon prince. [Вы знаете, князь, что я не бонапартистка.]
– «Dieu sait quand reviendra»… [Бог знает, вернется когда!] – пропел князь фальшиво, еще фальшивее засмеялся и вышел из за стола.
Маленькая княгиня во всё время спора и остального обеда молчала и испуганно поглядывала то на княжну Марью, то на свекра. Когда они вышли из за стола, она взяла за руку золовку и отозвала ее в другую комнату.
– Сomme c'est un homme d'esprit votre pere, – сказала она, – c'est a cause de cela peut etre qu'il me fait peur. [Какой умный человек ваш батюшка. Может быть, от этого то я и боюсь его.]
– Ax, он так добр! – сказала княжна.


Князь Андрей уезжал на другой день вечером. Старый князь, не отступая от своего порядка, после обеда ушел к себе. Маленькая княгиня была у золовки. Князь Андрей, одевшись в дорожный сюртук без эполет, в отведенных ему покоях укладывался с своим камердинером. Сам осмотрев коляску и укладку чемоданов, он велел закладывать. В комнате оставались только те вещи, которые князь Андрей всегда брал с собой: шкатулка, большой серебряный погребец, два турецких пистолета и шашка, подарок отца, привезенный из под Очакова. Все эти дорожные принадлежности были в большом порядке у князя Андрея: всё было ново, чисто, в суконных чехлах, старательно завязано тесемочками.
В минуты отъезда и перемены жизни на людей, способных обдумывать свои поступки, обыкновенно находит серьезное настроение мыслей. В эти минуты обыкновенно поверяется прошедшее и делаются планы будущего. Лицо князя Андрея было очень задумчиво и нежно. Он, заложив руки назад, быстро ходил по комнате из угла в угол, глядя вперед себя, и задумчиво покачивал головой. Страшно ли ему было итти на войну, грустно ли бросить жену, – может быть, и то и другое, только, видимо, не желая, чтоб его видели в таком положении, услыхав шаги в сенях, он торопливо высвободил руки, остановился у стола, как будто увязывал чехол шкатулки, и принял свое всегдашнее, спокойное и непроницаемое выражение. Это были тяжелые шаги княжны Марьи.
– Мне сказали, что ты велел закладывать, – сказала она, запыхавшись (она, видно, бежала), – а мне так хотелось еще поговорить с тобой наедине. Бог знает, на сколько времени опять расстаемся. Ты не сердишься, что я пришла? Ты очень переменился, Андрюша, – прибавила она как бы в объяснение такого вопроса.
Она улыбнулась, произнося слово «Андрюша». Видно, ей самой было странно подумать, что этот строгий, красивый мужчина был тот самый Андрюша, худой, шаловливый мальчик, товарищ детства.
– А где Lise? – спросил он, только улыбкой отвечая на ее вопрос.
– Она так устала, что заснула у меня в комнате на диване. Ax, Andre! Que! tresor de femme vous avez, [Ax, Андрей! Какое сокровище твоя жена,] – сказала она, усаживаясь на диван против брата. – Она совершенный ребенок, такой милый, веселый ребенок. Я так ее полюбила.
Князь Андрей молчал, но княжна заметила ироническое и презрительное выражение, появившееся на его лице.
– Но надо быть снисходительным к маленьким слабостям; у кого их нет, Аndre! Ты не забудь, что она воспитана и выросла в свете. И потом ее положение теперь не розовое. Надобно входить в положение каждого. Tout comprendre, c'est tout pardonner. [Кто всё поймет, тот всё и простит.] Ты подумай, каково ей, бедняжке, после жизни, к которой она привыкла, расстаться с мужем и остаться одной в деревне и в ее положении? Это очень тяжело.
Князь Андрей улыбался, глядя на сестру, как мы улыбаемся, слушая людей, которых, нам кажется, что мы насквозь видим.
– Ты живешь в деревне и не находишь эту жизнь ужасною, – сказал он.
– Я другое дело. Что обо мне говорить! Я не желаю другой жизни, да и не могу желать, потому что не знаю никакой другой жизни. А ты подумай, Andre, для молодой и светской женщины похорониться в лучшие годы жизни в деревне, одной, потому что папенька всегда занят, а я… ты меня знаешь… как я бедна en ressources, [интересами.] для женщины, привыкшей к лучшему обществу. M lle Bourienne одна…
– Она мне очень не нравится, ваша Bourienne, – сказал князь Андрей.
– О, нет! Она очень милая и добрая,а главное – жалкая девушка.У нее никого,никого нет. По правде сказать, мне она не только не нужна, но стеснительна. Я,ты знаешь,и всегда была дикарка, а теперь еще больше. Я люблю быть одна… Mon pere [Отец] ее очень любит. Она и Михаил Иваныч – два лица, к которым он всегда ласков и добр, потому что они оба облагодетельствованы им; как говорит Стерн: «мы не столько любим людей за то добро, которое они нам сделали, сколько за то добро, которое мы им сделали». Mon pеre взял ее сиротой sur le pavе, [на мостовой,] и она очень добрая. И mon pere любит ее манеру чтения. Она по вечерам читает ему вслух. Она прекрасно читает.