次のコードが間違っていると感じたので、正しい道をたどっているかどうか知りたいのですが。申し訳ありませんが、この質問に適切な名前を付ける方法がわかりませんでした。
DBからデータをロードするために使用される特定のShapeEntityクラスがあります。Shapeには他にも具体的なクラスがあり(将来的には多く持つことができます)、LSPを使用してこれらの形状を描画したいので、IShape抽象化を使用します。ShapeEntityによって提供されるDB情報を使用して、具体的な形状オブジェクトをインスタンス化します。
したがって、私の懸念はMain()関数内にあり、単純なif-elseを使用してこれらのシェイプを作成します。if-elseブロックを使用して「不明な」オブジェクトを作成するこの正しいアプローチはありますか?たぶん、ある種のShapeServiceに対してShapeオブジェクトの作成を実行できますか?どうすれば他の方法で解決できますか?
public class ShapeEntity
{
int idShape { get; set; }
}
public interface IShape
{
void Draw();
}
public class Square : IShape
{
public void Draw() { }
}
public class Rectangle : IShape
{
public void Draw() { }
}
public class Canvas()
{
public static void Main()
{
List<IShape> Shapes = new List<IShape>();
foreach(ShapeEntity ShapeItem in ShapeRepository.GetAll())
{
if(ShapeItem.idShape == 1)
{
Shapes.Add(new Square());
}
else if(ShapeItem.idShape == 2)
{
Shapes.Add(new Rectangle());
}
}
}
public void DrawShapesOnCanvas(IList<IShape> Shapes)
{
foreach(IShape Shape in Shapes)
{
Shape.Draw();
}
}
}