私の質問は、オブジェクト作成で列挙型を削除してステートメントを切り替える必要があるデザインパターンとほぼ同じですが、抽象ファクトリパターンがここにうまく適合しているとは思いません。
私は現在、いくつかの既存の DAL/ORM 混合ライブラリのリファクタリング/再実装を計画しています。既存のコードのどこかに、次のようなコードがあります。
class Base
{
static Base * create(struct Databasevalues dbValues)
{
switch(dbValues.ObjectType)
{
case typeA:
return new DerivedA(dbValues);
break;
case typeB:
return new DerivedB(dbValues);
break;
}
}
}
class DerivedA : public Base
{
// ...
}
class DerivedB : public Base
{
// ...
}
したがって、データベース通信を担当するライブラリは、構造体にデータベース エンティティに関するすべての情報を入力し、次に上記の create() メソッドを呼び出して、対応するオブジェクトを ORM に実際に作成します。しかし、基本クラスがそのすべての派生クラスを知っているという考えは好きではありません。また、switch ステートメントも好きではありません。また、これらのオブジェクトを作成するためだけに別のクラスを作成することも避けたいと思います。現在のアプローチについてどう思いますか?この機能をどのように実装しますか?