我尝试提取一些操作与这样一些附加的属性的接口:接口用于从基类派生的其他属性
基实体类别:
public enum MyClassEnum
{
classA,
classB,
classC
}
public abstract class MyBaseClass
{
public string entityA { get;set; }
public int entityB { get; set; }
}
然后我有一些类派生从MyBaseClass:
public class ClassA : MyBaseClass{}
public class ClassB : MyBaseClass
{
public string AnotherEntity { get; set; }
}
public class ClassC : MyBaseClass
{
public string AnotherEntity2 { get; set; }
public string AnotherEntity3 { get; set; }
}
我尝试有一个这样的接口(这是我至今):
public interface IMyClassRepository
{
void Create(MyBaseClass param);
void Update(MyBaseClass param);
}
,混凝土类就应该是这样的:
public class ClassBRepository : IMyClassRepository
{
private readonly BaseRepository _baseRepository;
public ClassBRepository
{
_baseRepository = new BaseRepository();
}
public void Create(MyBaseClass param)
{
// will use automapper to do the mapping
var theClassB = MyBaseClass.TranslateTo<ClassB>();
// How i can design the interface that accept additional Property on class B?
// last save the operation to DB..
_baseRepository.Save(theClassB);
}
}
UPDATE
我将创建IMyClassRepository
使用Factory
这样的:
public class MyClassFactory
{
public IMyClassRepository CreateInstance(MyClassEnum param)
{
switch(param)
{
case MyClassEnum.ClassA
{
return new ClassARepository;
}
case MyClassEnum.ClassB
{
return new ClassBRepository;
}
case MyClassEnum.ClassC
{
return new ClassCRepository;
}
}
}
}
并在年底有操作类是这样的:
public class ConcreteOperationClass
{
private IMyClassRepository _myClass;
public ConcreteOperationClass(MyClassEnum param)
{
_myClass = new MyClassFactory().CreateInstance(param);
}
public void CreateMyClass(MyBaseClass param, // this should be a parameter class B or Class C needed)
{
_myClass.Create(param, // additional property for classB or classC);
}
}
的问题是如何创建的IMyClassRepository
从ClassB
或ClassC
附加属性的实现?
也许继承不是这里的解决方案,如果他们都是不同的。 – 2014-10-07 02:25:47
'void Create(MyBaseClass param);'?你能解释一下这种方法应该做什么吗? (通常'Create'会返回刚刚创建的东西,但在您的设计中并非如此)。 – 2014-10-07 02:26:37
@JustinPihony但他们有相同的实体和相同的操作。 – reptildarat 2014-10-07 02:26:42