サービスをビューに依存させない


依存ってどういう意味ですか?


まず依存を定義する必要があります.みんな自分の定義を持っていますが、私の依存に対する見方は以下の通りです.

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では、サービスビューへの依存性を解消するために、ビューに従って加工する必要があります.
オブジェクトが互いに詳細に理解されている場合は、変更に対応するのは難しいです.また、変更が比較的頻繁なビューを知っている場合は、変更に対応するのがさらに難しくなります.
相手同士はあまり親密にならないで~!
にこにこ