サービスをビューに依存させない
依存ってどういう意味ですか?
まず依存を定義する必要があります.みんな自分の定義を持っていますが、私の依存に対する見方は以下の通りです.
Aが変わったらBが変わる→AはBに頼る。
自分の役割を果たすために、オブジェクトは他のオブジェクトにコンテンツを要求し、要求の値を受信します.
Aオブジェクトは、Bオブジェクトに要求を送信することによってA形式の応答を受信することを想定する.応答の形式はBオブジェクトによって決定される.
したがって、Bオブジェクトの応答形状が変化すると、Aオブジェクトも変化する.
public class A {
public void method() {
final B b = new B();
int something = b.findSomthing(); //아래의 코드로 변경이 일어남
//double something = b.findSomething();
}
}
public class B {
public int findSomething() {
//변경 전의 메소드
}
public double findSomthing() {
//변경된 메소드
}
}
インポート中に、明確なマージと依存性があります.非表示の依存(またはマージ)も存在します.△依存という言葉で形容できますか…)
public class ChessGameService {
public Map<String, Object> move(final String sourcePosition, final String targetPosition) {
Board board = loadSavedBoard();
board = board.move(sourcePosition, targetPosition);
final Map<Position, Piece> pieces = board.getAllPieces();
return convert(pieces);
// spark 프레임워크에서 사용할 수 있는 Map<String, Object>로 변환
}
}
前述したように、ChossGameServiceは、出力する部品に関する情報をMap「Map
出力モードが変更された場合、選択サービスは使用できません.変更する必要があります.
現在SparkFrameworkにはMap
view가 변경
になるとChoesGameServiceは使用できなくなり、변경
戻りタイプが提供されるはずです.これに基づいて、依存は変更に影響を及ぼすかどうかを定義します.
もしそうであれば、上記のサービスはviewに依存します.
ビューとサービスの間にコントローラレイヤがあるため、ビューとサービスは相互にインポートされません.
サービスの観点から、ビューに必要なデータ構造の形式を理解しているので、ビューの具体的な内容を理解していると思います.
private void move(final ChessGameService chessGameService) {
post("/move", ((req, res) -> {
final Map<String, Object> pieces = chessGameService
.move(req.queryParams("source"), req.queryParams("target"));
return render(pieces);
}));
}
また、ビューに次の変更が発生した場合は、サービスとビューを接続するコントローラで必要なフォーマットで値を加工できます.private void move(final ChessGameService chessGameService) {
post("/move", ((req, res) -> {
final Map<String, Object> pieces = chessGameService
.move(req.queryParams("source"), req.queryParams("target"));
return render(convertToNewViewFormat(pieces));
}));
}
private Map<String, String> convertToNewViewFormat(final Map<String, Object> pieces) {
//변경된 view에서 필요로 하는 형태로 가공
}
しかし、ChressGameServiceはSparkFrameworkを使用するビューに依存しています.public class ChessGameService {
public Map<String, Object> move(final String sourcePosition, final String targetPosition) {
}
}
private void move(final ChessGameService chessGameService) {
post("/move", ((req, res) -> {
final Map<Position, Piece> pieces = chessGameService
.move(req.queryParams("source"), req.queryParams("target"));
final Map<String, Object> convertedPieces = convertToWebViewPiece(pieces);
return render(convertedPieces);
}));
}
サービスは、ビューに依存しないシェイプを返します.下図に示すように、controllerでは、サービスビューへの依存性を解消するために、ビューに従って加工する必要があります.
オブジェクトが互いに詳細に理解されている場合は、変更に対応するのは難しいです.また、変更が比較的頻繁なビューを知っている場合は、変更に対応するのがさらに難しくなります.
相手同士はあまり親密にならないで~!
にこにこ
Reference
この問題について(サービスをビューに依存させない), 我々は、より多くの情報をここで見つけました https://velog.io/@byeongju/service가-view에-의존하지-않도록-하자テキストは自由に共有またはコピーできます。ただし、このドキュメントのURLは参考URLとして残しておいてください。
Collection and Share based on the CC Protocol