我遇到了这个问题:
实现IP产品接口的SQLBackend中的产品类。
我还在SAPBackend(ERP,会计软件)中获得了一个实现相同IP产品的产品。
两个后端都处于不同的项目中。
我希望能够在这两个项目之间使用传递产品,所以我需要相同的通用接口。
我在考虑将IProduct放在一个通用的接口项目中,但如果有许多常见的情况会导致该项目中有很多接口。如果只是导致我将这些接口暴露给很多项目
我想知道是否有一个更好的案例,所以SAPBackend和SQLBackend支持他们自己并仍然共享一个共同的界面?
namespace Interfaces
{
public interface IProduct
{
string name {set; get;}
}
}
namespace Sqlbackend
{
public class Product : IProduct
{
public string name { set; get; }
}
}
namespace ERPbackend
{
public class Product : IProduct
{
public string name { set; get; }
}
}
答案 0 :(得分:6)
.NET中的类型由其程序集确定范围。除非界面在同一个程序集中,否则它不是同一类型,不会被视为相同类型(强制转换将失败等)。
因此,您将需要项目之间的参考;最常见的是,第三个dll中只有常见的类型和接口。
例外情况是,如果您在两个层之间进行基于合同的SOA(例如通过WCF)。但我认为这不是你想要的。
答案 1 :(得分:2)
SQL后端中的IProduct
与ERP后端中的IProduct
具有不同的含义,因此我不会让它们共享相同的界面。
分别实现两个后端,然后使用预定义的格式和使用了解两者的类在它们之间传递数据。该类可以读取ERP IProduct
并写入SQL namespace ERPBackend
{
interface IProduct
{
string Code { get; }
string Description { get; }
}
class ProductForm
{
public IProduct CreateProductFromInput()
{
...
return product;
}
}
}
namespace SQLBackend
{
interface IProduct
{
string Id { get; }
string Description { get; }
}
class ProductDB
{
public void SaveProduct(IProduct product)
{
...
}
}
}
namespace MyApplication
{
class ProductController
{
private ProductForm form;
private ProductDB db;
public ProductController(ProductForm form, ProductDB db)
{
this.form = form;
this.db = db;
}
public void AddProduct()
{
ERPBackend.IProduct product1 = form.CreateProductFromInput();
SQLBackend.IProduct product2 =
new SQLBackend.MyProduct(product1.Code, product1.Description);
db.SaveProduct(product2);
}
}
}
。
{{1}}