以下は、http://www.nhforge.org/wikis/reference2-0en/architecture.aspx の勝手翻訳です。
(非常に)高レベルな NHibernateのアーキテクチャは図のようなものです:
(図)
この図は、NHibernateが、データベースとコンフィギュレーションデータを利用して、永続化サービス(と、永続化オブジェクト)の提供をアプリケーションに対して行う事を表しています。
実行時アーキテクチャをより詳しく見てみることにしましょう。残念なことに、NHibernateは柔軟で、様々なやり方をサポートしています。二つの、極端な例をみてみます。"lite"アーキテクチャでは、アプリケーションは自身でADO.NETのコネクションを提供し、トランザクションを管理します。このアプローチでは、NHirbenateのAPIのうち、最小のサブセットを利用します。
(図)
"full cream"アーキテクチャは、アプリケーションをADO.NETのAPIから切り離し、NHibernateに詳細の管理を任せます。
(図)
図で利用されているオブジェクトの定義を示します:
一つのデータベースに対する、コンパイル済みマッピングの、スレッドセーフ(イミュータブル)なキャッシュです。ISessionのファクトリーであり、IConnectionProviderのクライアントです。オプションとして、プロセス、もしくはクラスターレベルのトランザクション間で再利用可能なデータの(セカンドレベルの)キャッシュを保持できます。(??)
アプリケーションと永続化ストア間の対話を表現する、シングルスレッドで、短命なオブジェクトです。ADO.NETのコネクションをラップします。ITransactionのファクトリーでもあります。オブジェクトを辿ったり、識別子によってオブジェクトを探すときに利用される、永続化オブジェクトの(ファーストレベルの)キャッシュを管理します。
永続化状態と、ビジネスファンクションを含む、短命で、シングルスレッドなオブジェクトです。