バックグラウンド
CSV ファイルを使用して製品をインポートする Asp.net MVC 3.5 アプリケーションがあります。CSV ファイルは、構成可能なソースの特定のグループから取得できます。新しい CSV ソースを構成するには、ユーザーは最初に、どの CSV 列がどの製品プロパティにマップされるかを指定します。この構成はインポート テンプレートとして保存され、その後、各インポートが実行されるときに選択できるようになります。
この機能のフォルダー/オブジェクト構造を計画しようとして、壁にぶつかりました。私は、ルーティングのための Asp.net MVC の柔軟性を理解しています (そして気に入っています)。ただし、オブジェクト構造をより健全で保守しやすいものに保つために役立つアドバイスがあればお願いします。
最初に、Import.aspx ビューを含む製品フォルダーをセットアップします。これは、コントローラー/アクション モデルに十分に適合しているようです。ただし、上記のテンプレートを管理するための機能を考えると、混乱が生じます。
編集: インポート テンプレートは、さまざまなオブジェクトに適用できます。したがって、Product は、1 つ以上の ImportTemplates を作成できるオブジェクトの 1 つにすぎません。たとえば、ImportTemplate を持つ可能性のある別のオブジェクトは、Customer である可能性があります。
質問
Product フォルダーの下に ImportTemplate というサブフォルダーを作成し、そこに CRUD ビューを配置する必要がありますか? 次に、Import Template 関数のカスタム ルートを追加します。ここでの私の懸念は、フォルダーの深さと、兄弟アクションのインポートとの混乱です。または、ImportTemplate を 1 レベル上げてから、ルーティングを使用して Product フォルダーの下に配置する必要がありますか? 乱雑に聞こえます。
おそらく、フォルダー構造は Product/Import/Template である必要があります。この場合の問題は、インポートが実際にはオブジェクトではないことです。コントローラーであることがわかりますが、実際にはアクションであることを意図しています。この構造を使用する場合、(上記の Product/Import.aspx を置き換えるために) Import フォルダーに Upload.aspx ビューを配置する必要がありますか? これはちょっとマシになりそうです。
編集: ImportTemplate を製品以外のオブジェクト (つまり、顧客) に関連付けることができるという上記の追加要件により、Views フォルダーの直下に ImportTemplate フォルダーを配置する方がよいでしょうか?
このオブジェクト/フォルダー階層を構築するための代替案はありますか?
リサーチ
この問題を調査するために、フォルダーの構造と深さに関する質問を確認しました。ここにいくつかの質問がありますが、実際には私の質問に対する答えはありませんでした。
- ASP.NET MVC ビューまたは URL は何レベルの深さにする必要がありますか?
例
編集: ユーザーは定期的にサード パーティから製品のリストをインポートします。Web サイトにアップロードされる CSV ファイルからデータをインポートしています。製品インポート テンプレートのインスタンスをアカウントに作成/追加します。このテンプレート インスタンスには、次の設定が格納されます。
- CSV ファイルの「タイトル」という名前の列は、製品名フィールドにインポートする必要があります。
- CSV の「カテゴリ」列にある認識されないカテゴリは、「不明」カテゴリとしてインポートする必要があります。
別のユーザーは、別のサード パーティの CSV 形式に基づいて、または独自のシステム構成に基づいて、異なるルールを持つ場合があります (つまり、上記のユーザーのように不明なカテゴリが設定されていません)。
- CSV の「部品番号」という名前の列は、製品名フィールドと製品番号フィールドにインポートする必要があります。
- 認識されないカテゴリは、デフォルトで「汎用」カテゴリにインポートする必要があります。