序文:私は、共有ドライブからファイルを取得し、それらをデータベース内のいくつかのテーブルに変換し、ユーザーが DB 内のレコードに対して (MVC4 ASP.NET Web アプリケーションを介して) CRUD 操作を実行できるようにする一連のプログラムを作成しています。次に、データベース内のレコードを同じファイル形式に再構築し、ファイルを FTP でメインフレームに戻します。これらのファイルは、メインフレーム VSAM ファイルから抽出されたデータを表しており、形式を制御することはできません。メインフレーム抽出ファイルの取得、翻訳、編集、アセンブル、およびアップロードなど、同様の無駄なプロジェクトが他にも進行中です。すべてが完了しましたが、ファイルをアセンブルするためにコードを記述した方法は再利用できず、現在のプロジェクト ドメイン モデルのエンティティ オブジェクトにのみ固有のものです。
機会:他の今後のプロジェクトのファイル内のデータは非常に似た形式であるため、それらのファイルも再構築するための再利用可能なコードが必要です。
データ:以下は、いくつかのモック ファイル データを表しています。ファイル内のテキストの各行 (ここではレコードと呼びます) は、特定の長さ (この場合は 80 バイト) にすることができます。レコードは、アスタリスクで始まるコメントにすることができます。コメントされていないレコードには、4 つの異なるタイプがあります。
- ライン
- シークエンストレーラー
- テーブルトレーラー
- テーブル タイプ トレーラー
「行」は「シーケンス」に属します (シーケンス番号 - テーブルにのみ固有)。「シーケンス」は「テーブル」に属します (テーブル キー - ファイルに固有)。「テーブル」にはタイプがあり、テーブルはファイル内のタイプとキーによって順序付けられます。
ラインには次の順序があります。
- 3 桁のビジネス コード。
- 3 文字のテーブル型。
- 5 文字のテーブル キー。
- 9 桁のシーケンス番号。ゼロが埋め込まれました。
- 6 桁の回線番号。ゼロが埋め込まれました。
- 3 文字のアクション コード。
- 1キャラ込み コード。
- 5 桁の値の長さ。
- 残りは値です。
シークエンス トレーラーには次の順番があります。
- 3 桁のビジネス コード。
- 3 文字のテーブル型。
- 5 文字のテーブル キー。
- 9 桁のシーケンス番号。ゼロが埋め込まれました。
- 5 桁のフィラー ('9')。
- Sequence 内の 9 桁の行数 (左にゼロが埋め込まれます)。
Table Trailer には次の順序があります。
- 3 桁のビジネス コード。
- 3 文字のテーブル型。
- 5 文字のテーブル キー。
- 14 桁のフィラー ('9')。
- テーブル内のシーケンスの 9 桁のカウント (左側にゼロが埋め込まれています)。
Tables Trailer には、次の順番があります。
- 3 桁のビジネス コード。
- 3 文字のテーブル型。
- 19 桁のフィラー ('9')。
- ファイル内のテーブル (#2 テーブル タイプ) の 9 桁のカウント。(左にゼロが埋め込まれます)。
Tables Trailer は、ファイル内の順序付けられた各テーブル セットの後に発生します。
****************************************************** ************************ * 表 00001 - その他のコメント * 04/04/11 テーブル作成 ****************************************************** ************************ * SEQ 1 のコメント 720PFT0000100000001000001PROI00011E1037-E1039 720PFT0000100000001000002PGMI000016 720PFT0000100000001000003RTN 00004 NAC 720PFT0000100000001099999000000003 * SEQ 2 のコメント 720PFT0000100000003000001PROI00011E1037-E1039 720PFT0000100000003000002CLSI000037,8 720PFT0000100000003000003MEDE000010 720PFT0000100000003000004RTN 00004 NAC 720PFT0000100000003099999000000004 720PFT0000199999999999999000000002 720PFT9999999999999999999000000001
コード:以下は、ドメイン モデルのエンティティを表します (簡潔にするために、関連するエンティティを除外しました)。
[Table("Line",Schema="Pft")]
public class Line
{
#region Entity Properties
[Key]
public int LineId { get; set; }
[Required]
public short LineNumber { get; set; }
[StringLength(255)]
public string Comment { get; set; }
[Required]
public int SequenceId { get; set; }
[Required]
public int IncludeExcludeId { get; set; }
[Required]
public int QualifierId { get; set; }
[Required]
[ForeignKey("PlanFlexTable")]
public int PlanFlexTableId { get; set; }
#endregion
}
[Table("Sequence", Schema="Pft")]
public class Sequence
{
#region Entity Properties
[Key]
public int SequenceId { get; set; }
[Required]
public int SequenceNumber { get; set; }
[StringLength(511)]
public string Comment { get; set; }
#endregion
}
[Table("PlanFlexTable", Schema = "Pft")]
public class PlanFlexTable
{
#region Entity Properties
[Key]
public int PlanFlexTableId { get; set; }
[Required]
public int StatusId { get; set; }
[StringLength(5, MinimumLength = 5)]
[Required]
public string Key { get; set; }
[StringLength(255)]
[Required(AllowEmptyStrings = true)]
public string Title { get; set; }
[Display(Name="Table Comment")]
public string Comment { get; set; }
public int PlanFlexTableTypeId { get; set; }
public int UpdateHistoryId { get; set; }
[StringLength(3)]
[Required]
public string PlanId { get; set; }
#endregion
}
概要:上記のようなファイルを生成する再利用可能な方法についてアドバイスを求めています。現在、PlanFlexTable エンティティの IEnumerable を受け取り、アップロードするファイルを組み立てて反復処理する 1 つのクラスがあります。リフレクションを使用してエンティティに配置する属性を作成し、ファイルの構築方法を定義することを検討しました。ただし、他の可能性についてのフィードバックやアイデアをいただければ幸いです。
ありがとう!