以下は、私のデータベース テーブルの一部です。
アカウント
--------------------------
Account_Id
Account_Types
Customer_Id
Row_Guid
顧客
--------------------------
Customer_Id
First_Name
Last_Name
Balance
Row_Guid
注文
--------------------------
Order_Id
Customer_id
Row_Guid
Entity Framework を使用してクラスを生成しました。その後、プレゼンテーション層と通信して追加削除などを行うユーティリティクラスをビジネスロジック層に書き始めました。たとえば、ユーザーがフォームの「追加」ボタンをクリックすると、イベントはこれからメソッドを呼び出しますユーティリティ クラス。
機能はすべてのテーブルで似ているため、ジェネリック インターフェイスを作成して、各テーブル固有のユーティリティ クラスに実装させることができます。
私は次のものを持っています:
BillingDBEntities
すべての「ドメインオブジェクト」を含むエンティティフレームワークによって生成されたクラスです。このクラスには、データベース テーブルを表す ACCOUNT、CUSTOMER などの内部オブジェクトがあります。
これは私のユーティリティインターフェースです:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data.Objects.DataClasses;
using DataAccessLayer;
namespace BusinessLogicLayer.Implementations
{
public interface IUtility<T> where T : EntityObject
{
void AddEntity(BillingDBEntities billingEntity, T item);
void AddEntity(BillingDBEntities billingEntity, object[] items, Type[] types);
void RemoveEntity(BillingDBEntities billingEntity, T item);
void RemoveEntity(BillingDBEntities billingEntity, object[] items, Type[] types);
void UpdateEntity(BillingDBEntities billingEntity, object[] items, Type[] types);
}
}
void AddEntity(BillingDBEntities billingEntity, T item);
T のようなメソッドの場合、単純に ACCOUNT、ORDER、CUSTOMER などに置き換えられます。ただし、void のようなメソッドの場合は
AddEntity(BillingDBEntities billingEntity, object[] items, Type[] types);
items 配列には、型のコンポーネントが含まれています。Account の場合は (Account_id、Customer_id、Account_type、Row_guid) が含まれ、types 配列にはコンポーネントのタイプ (たとえばアカウントの場合は long、long、long、Guid) が含まれます。
public class Utility : IUtility<ACCOUNT>
{
public void AddEntity(BillingDBEntities billingEntity, ACCOUNT item)
{
billingEntity.ACCOUNTS.AddObject(item);
}
public void AddEntity(BillingDBEntities billingEntity, object[] items, Type[] types)
{
//What should I write here????
}
..
.
.
.
}
質問: メソッドを実装するにはどうすればよいですか? BillingDBEntities
オブジェクト変数を設定するメソッド内でどのように呼び出されますか? Utility 、 Utility 、...を作成する代わりに、1つのクラスのみを作成できる方法はありますか?
インターフェイスのデザインが間違っている場合、またはそのようなタスクを実装するためのよく知られた方法がある場合は教えてください。
前もって感謝します