リフレクションを使用する Dart でエンティティ マネージャーを構築しようとしています。メソッドgetById(String id, String returnClass)がメソッド_get[returnClass]ById(String id)を呼び出すという考え方です。
これを達成するために、dart:mirrors を使用して、エンティティ マネージャー オブジェクトにそのようなメソッドがあるかどうかを判断し、それを呼び出します。残念ながら、LibraryMirror には関数が含まれていません。
class EntityMgr {
Object getById(String id, String returnClass) {
InstanceMirror result = null;
String methodName = '_get'+returnClass+'ById';
// Check if a method '_get[returnClass]Byid exists and call it with given ID
if(_existsFunction(methodName)) {
Symbol symbol = new Symbol(methodName);
List methodParameters = new List();
methodParameters.add(id);
result = currentMirrorSystem().isolate.rootLibrary.invoke(symbol, methodParameters);
}
return result;
}
Product _getProductById(String id) {
return new Product();
}
bool _existsFunction(String functionName) {
return currentMirrorSystem().isolate.rootLibrary.functions.containsKey(functionName);
}
}