所以我有这个域名模型:
public abstract class PrimaryKey
{
public Guid Id {get;set;}
}
public class MyEntity : PrimaryKey
{
public string StringProperty {get;set;}
public MyEntity2 MyEntity2 {get;set;}
}
public class MyEntity2 : PrimaryKey
{
public string StringProperty {get;set;}
}
我想给它们接口,以便我可以将它们与我注入的服务一起使用。我不能仅仅参考服务核心项目中的域模型,因为我认为这是落后的。
所以我想到了这个:
public interface IPrimaryKey
{
Guid Id {get;set;}
}
public interface IMyEntity : IPrimaryKey
{
string StringProperty {get;set;}
IMyEntity2 MyEntity2 {get;set;}
}
public interface IMyEntity2 : IPrimaryKey
{
string StringProperty {get;set;}
}
所以现在我有了具体的课程和界面。但是我的接口现在如何影响我的具体类,肯定引用IMyEntity
将在具体类中意味着我必须定义Id
属性,但我真的希望我的抽象类能够节省时间。
以下是我得到的:
public class MyEntity : IMyEntity
{
public Guid Id {get;set;}
public string StringProperty {get;set;}
public IMyEntity MyEntity2 {get;set;}
}
如何使用抽象类?它还能用吗?或者我还有其他编程方法吗?
我想也许这会奏效:
public class MyEntity : PrimaryKey, IMyEntity
{
// etc, but no Id field this time
}
如何在我的存储库中工作,我使用带有泛型的接口:
public interface IRepository
{
Task<List<T>> AllAsync<T>();
Task<T> FindAsync<T>(Expression<Func<T, bool>>[] params);
}
public class Repository : IRepository
{
public Task<List<T>> AllAsync<T>()
{
return _dbContext.Set<T>().ToListAsync();
}
// etc
}
会有什么影响吗?
我这样做是因为我想将服务核心和域模型抽象为一个新项目,并在ASP.NET前端和WCF服务之间使用该项目。该服务目前只需要使用一个实体,但这可能会在以后增加。
答案 0 :(得分:0)
我只想指出,在域实体中,如果您引用一个接口,它就不会在数据库中作为列创建。
所以我不认为这可以做到,就像基思佩恩所说的那样,它只会使它复杂化。