ASP.NET MVC サーバーに対するサーバー側処理用に構成された jQuery DataTableがあります。
プログレッシブ エンハンスメントを実現するために、HTML テーブルがレンダリングされてから、DataTable にアップグレードされます。DataTable は、より多くのデータを取得するために AJAX 呼び出しを行うとき、返された JSON の要素が既存のテーブルと列のレイアウトと関連付けられることを期待します。
これにより、次の理由により、アーキテクチャ上の摩擦が発生するようです。
最初のページのレンダリング中:
- Controller は、データベース データを DTO に変換し、ViewData モデルを確立します。
- ViewPage は、HtmlHelper などを使用して ViewData モデルを HTML に変換します。
AJAX 更新中:
- コントローラーは、ハイパーリンクなどを使用して、データベース データをテーブル セル データに変換します。
- DataTable は、返されたデータをテーブル セルに直接レンダリングします。
ここでのポイントは、コントローラーの責任がDTO を返すことに限定されている場合に、コントローラーがテーブル レンダリング レイアウトを知ることを余儀なくされていることです。
ここで正しいパターンは何ですか?AJAX 呼び出しをサポートし、コントローラーの単一責任プリンシパルに準拠するにはどうすればよいですか?
いくつかの明確さ:
私の DTO には 3 つのプロパティがあります。
public class AccountListing
{
public int Id { get; set; }
public string AccountCode { get; set; }
public string AccountName { get; set; }
}
レンダリングされた DataTable には 4 つの列があります。
+--------------+--------------+------+------+
| Account Code | Account Name | View | Edit |
+--------------+--------------+------+------+
| 12345 | FooBar Inc. | Link | Link |
+--------------+--------------+------+------+
ViewPage は、3 つのプロパティ DTO を 4 列のテーブルにレンダリングします。コントローラーが AJAX JSON と同じ 3 つのプロパティ DTO を返す場合、データ テーブルは列の欠落について不平を言います...データ テーブルは、返された JSON がソース データではなく、セル要素を表すことを期待します。
現在、jQuery 配列変換とカスタム テーブル レンダリングを使用してこれを解決しています。これにより、ViewPage のロジックが効果的に複製されます。
代替手段はありますか?