我有 2 个非常相似的 sql 表。每个表只有外键不同。
TemplateUnit table:
Id (PK)
ParentId
Name
TemplateId (FK)
TestplanUnit table:
Id (PK)
ParentId
Name
TestplanId (FK)
当我选择 2 个内容几乎相同的表时——只是 FK 不同——你真的在你的服务和数据提供者中创建了你的 CRUD 方法的副本(使用 ado.net pure)吗?
如何改进服务,以便在服务和数据提供者类中只使用一种 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 中使用/需要哪个变量。
你怎么看?