Я пытаюсь создать своего рода основу для какого-то базового процесса в приложении. Существует некоторое общее поведение, когда я должен выполнить некоторые операции, но эти операции различаются в зависимости от некоторых сценариев. Я сделал что-то, я не уверен, считается ли плохой практикой делать что-то вроде этого:
public interface IMyDto
{
string makerIdentifier { get; set; }
}
public class DtoOne:IMyDto
{
public string makerIdentifier { get; set; }
//Custom properties for ConcreteOne
}
public class DtoTwo:IMyDto
{
public string makerIdentifier { get; set; }
//Custom properties for ConcreteTwo
}
public abstract class AbstractMaker
{
public abstract void DoSomething(IMyDto myInterface);
}
public class ConcreteMakerOne:AbstractMaker
{
public override void DoSomething(IMyDto myInterface)
{
var concrete = myInterface as DtoOne;
// If concrete is not null..do stuff with DtoOne properties
}
}
public class ConcreteMakerTwo : AbstractMaker
{
public override void DoSomething(IMyDto myInterface)
{
var concrete = myInterface as DtoTwo;
// If concrete is not null..do stuff with DtoTwo properties
}
}
public class Customer
{
public void MakeSomething(IMyDto myDto)
{
var maker = GetMaker();
maker.DoSomething(myDto);
}
private AbstractMaker GetMaker()
{
//Stuff to determine if return ConcreteOne or ConcreteTwo
}
}
Код, которым я не доволен, это:
var concrete = myInterface as DtoOne;
Я был бы очень признателен, если бы кто-нибудь дал мне совет или совет по поводу схемы или хорошей практики для этого сценария.