仕事に関しては、特定の種類のレコードが入ってきますが、各プロジェクトには独自の実装があります。列などは異なりますが、一般的なプロセスは同じです (レコードがバッチに分割される、バッチが割り当てられる、バッチが完了する、バッチが返される、バッチが送信されるなど)。列の多くも共通ですが、名前が変更されることがあります (ある BatchId と別の Id。[Column("name")] がこの問題を処理します)。
現在、これは、インターフェイスで指定された共通コンポーネントを使用したバッチ割り当て機能の実装のために私が持っているものです:
public interface IAssignment
{
// properties
...
// methods
T GetAssignmentRecord<T>(int UserId, int BatchId) where T : IAssignment;
List<T> GetAssignmentRecords<T>(int UserId) where T : IAssignment;
}
現在、バッチ割り当てを持つ 2 つのプロジェクトがあります。これらは EntityFramework で行われるため、名前空間 1 の割り当てと名前空間 2 の割り当てはまったく異なるものですが、それらを返すためのすべてのメソッドを駆動する特定の共通コンポーネント (ID、割り当てられたユーザー、チェックインなど) によってバインドされます。
私の主な質問は、これを間違って行っているかどうか、およびこれを達成するためのより良い方法があるかどうかであり、データをコントローラーにパイプして、コントローラーをプロジェクトごとに似たように見せながら、メソッドの多くを機能させることができるかどうかです。自動的に処理されます(主に、更新を行う必要があるときに「1つを修正してすべてを修正する」シナリオが発生するようにするため)。
以下は、namespace1 の実装方法の例です。
public class Assignment
{
...
public T GetAssignmentRecord<T>(int UserId, int BatchId) where T : IAssignment
{
var db = new Database1Context();
return (T) Convert.ChangeType(db.Assignment.Where(c => c.UserId == UserId && c.BatchId == BatchId && c.Assigned).First(), typeof(T));
}
}
コントローラーで:
Assignment assignment = new Assignment();
var record = assignment.GetAssignmentRecord<Assignment>(userid, batchid);
// do stuff
コントローラーのコードは、実際に私が想定している方法です。割り当てクラスを完了しましたが、適切な方法で行っているかどうか当惑しています。これが間違っているかもしれないと私が感じる理由は、基本的に「インターフェイスがジェネリックを探している、エンティティ フレームワークを使用してデータベースから強力な型指定されたオブジェクトを取得している、それをジェネリックにキャストしている、と言っているからです。 「リクエストを作成しています。最初にジェネリックに変換したのと同じ厳密に型指定されたオブジェクトを求めています。」
これを行うより良い方法はありますか?それとも、私が行くべきまったく別の方向ですか?