我嘗試提取一些操作與這樣一些附加的屬性的接口:接口用於從基類派生的其他屬性
基實體類別:
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