public interface IRepository<T>
where T: IEntity
{
T Get(Guid Id);
void Post(T entity);
void Remove(Guid id);
}
public class EFRepository<T>: IRepository<T>
where T: IEntity
{
/*Логика для EF*/
}
public abstract class Product
{
public int ProductId { get; set; }
public string Name { get; set; }
public abstract int GetShopPrice(City city);
}
public sealed class SimpleProduct : Product
{
public override int GetShopPrice(City city)
{
//логика
}
}
public sealed class ModuleProduct : Product
{
public override int GetShopPrice(City city)
{
//логика
}
}