非常によく似た2つのSQLテーブルがあります。テーブルごとに異なるのは外部キーだけです。
TemplateUnit table:
Id (PK)
ParentId
Name
TemplateId (FK)
TestplanUnit table:
Id (PK)
ParentId
Name
TestplanId (FK)
ほぼ同じコンテンツを持つ 2 つのテーブル (FK が異なるだけ) を使用する場合、サービスとデータプロバイダー (ado.net pure を使用) で CRUD メソッドの複製を本当に作成しますか?
サービスとデータプロバイダー クラスで 1 種類の Get/Add/Update/Delete メソッドのみが使用されるように、サービスをどのように改善しますか? また、単体テストを重複させたくありません...
アップデート:
これはこれまでの私の解決策です:
public class Unit
{
public string Name { get; set; }
public int Id { get; set; }
public Nullable<int> ParentId { get; set; }
public int TemplateId { get; set; }
public bool IsLazy { get; set; }
}
public class UnitDTO
{
public UnitDTO(UnitMode mode)
{
switch (mode)
{
case UnitMode.Template:
this.ForeinKeyName = "TemplateId";
this.TableName = "TemplateUnit";
break;
case UnitMode.Testplan:
this.ForeinKeyName = "TestplanId";
this.TableName = "TestplanUnit";
break;
}
UnitBO = new Unit();
}
public string TableName { get; private set; }
public string ForeinKeyName { get; private set; }
public Unit UnitBO { get; private set; }
}
public enum UnitMode
{
Template = 0,
Testplan = 1,
}
BLL と DAL の Get/Add/Delete メソッドは、必要なすべての情報を含む UnitDTO オブジェクトを取得します。
このプロジェクトがチームで行われる場合、UnitDTO を作成し、それを各 CRUD メソッドの BLL に渡すときに、DAL でどの変数が使用/必要とされるかを知る必要があるという欠点があります。
どう思いますか?