接口架构设计建议
本文关键字:接口 | 更新日期: 2023-09-27 18:10:37
我有一个产品经理应用程序,我试图使用接口设计。产品可以是两种类型中的一种,打印或在线。我希望能够做通常的CRUD操作。我正在使用实体框架,但在构建接口时遇到了一个障碍。
例如,我为接口AddProduct(Product productToCreate)添加了我的第一个方法。由于我的实体来自实体框架,我该为产品使用什么类型?因此,我创建了一个名为Product的中间对象,将实体框架对象转移到其中,以便它可以适应接口。对吗?请建议。class EFPrint
{
//Entity Framework object
public int PrintId { get; set; }
public string Product { get; set; }
public string Code { get; set; }
}
class EFOnline
{
//Entity Framework object
public int OnlineId { get; set; }
public string Product { get; set; }
public string Code { get; set; }
}
class Product
{
public int Id { get; set; }
public string Product { get; set; }
public string Code { get; set; }
}
interface IProductManagerService
{
void AddProduct(Product product);
}
class PrintService : IProductManagerService
{
public void AddProduct(Product product)
{
throw new NotImplementedException();
}
}
class OnlineService : IProductManagerService
{
public void AddProduct(Product product)
{
throw new NotImplementedException();
}
}
实体框架允许你使用基类。你应该创建一个基本的Product类,让OnlineProduct和PrintProduct继承自Product:
public class Product { ... }
public class Online : Product { ... }
public class Print : Product { ... }
在您的DbContext中,您不应该为每种类型都使用DbSet,而应该为Product使用单个DbSet,并且只需添加访问器以便仅从特定类型检索产品:
public class ProductsContext : DbContext
{
public DbSet<Product> Products { get; set; }
public IQueryable<Online> OnlineProducts
{
get
{
return Products.OfType<Online>();
}
}
public IQueryable<Print> PrintProducts
{
get
{
return Products.OfType<Print>();
}
}
}