サービスレイヤーは、モデルレイヤーの上にあると想定されています。そのため、モデルはサービスを呼び出すことは想定されていません。
しかし、私は次のような状況に直面しています。
interface Component {
getResult();
}
class Number implements Component {
private value;
public getResult() {
return value;
}
}
class Addition implements Component {
private component1;
private component2;
public getResult() {
return component1->getResult() + component2->getResult();
}
}
class ConstantFromExternalSource implements Component {
private identifier;
public getResult() {
// call a service for fetching constant identified by identifier
}
}
(擬似コード)
ここで、私のモデルはサービス(Webサービスかどうか)を介して外部データソースにアクセスする必要があります。
この状況で私はどのようにすべきですか?モデル内のサービスを呼び出しても大丈夫ですか?
「getResult」メソッドをモデルから移動して「ComponentService」に入れることを提案した場合、OOPのすべての利点が失われるため、同意しません(ここで、モデルは再帰的に解決する必要のあるツリーを作成します) 、したがって、OOPが最良のソリューションです)。