CQS アーキテクチャ パターンの背後にある原則は、クエリとコマンドを個別のパスに分けることです。理想的には、永続ストアを読み取り/書き込みでパーティション分割できますが、私の場合は、単一の正規化されたデータベースがあります。
ORM (私の場合は NHibernate) を使用している場合、コマンドを発行するときに ORM が使用されることは明らかです。しかし、ユーザー画面のデータ (DTO) を整形するために実行する必要があるさまざまなクエリはどうですか? CQS のクエリ側を実行するときに ORM を捨てるのは一般的なことですか?
クエリと DTO プロジェクションはどこに実装すればよいですか? ストレート ADO.NET (データリーダー、dtos、データテーブル、ストアド プロシージャ)? 一部のクエリは非常にユニークで、すべてをまとめるために多くの結合が必要です。クエリのためにデータベースを非正規化したくありませんが、ビューを作成することはできます (貧弱な非正規化)。