Является ли передача зависимости от одного частного метода другому плохой практикой внедрения зависимости? - PullRequest
0 голосов
/ 21 января 2019

У меня есть адаптер - класс Radius, который, насколько я понимаю, является зависимостью, и я не совсем уверен, стоит ли оставлять его как есть, но тогда непонятно передавать его в качестве аргумента следующемучастный метод ИЛИ может быть есть способ справиться с этим, который является более сложным?Я знаю, что этот вопрос не очень ясен, но суть в том, что иметь класс зависимостей, передаваемый из одного закрытого метода в другой, - плохая практика или нет?

public void drawClock(Canvas canvas, float clockHandRotationAngles[], Radius radius, ArrayList<ClockElement> clockElements, ArrayList<Paint> clockHandPaintList, ClockHandDrawingType clockHandDrawingType) {
    canvas.drawArc(rect, STARTING_ANGLE_FOR_CIRCLE_DRAWING, DEGREES_IN_CIRCLE, true, circlePaint);
    for (int i = 0; i < clockHandRotationAngles.length; i++) {
        drawClockHand(canvas, clockHandRotationAngles[i], radius.getRadiusOfSpinning(clockElements.get(i)), clockHandPaintList.get(i), clockHandDrawingType);
    }
}

private void drawClockHand(Canvas canvas, float clockHandRotationAngle, int clockHandLength, Paint clockHandPaint, ClockHandDrawingType clockHandDrawingType) {
    switch (clockHandDrawingType) {
        case ARC:
            drawArc(canvas, clockHandRotationAngle, clockHandLength, clockHandPaint);
            break;
        case LINE:
            drawLine(canvas, clockHandRotationAngle, clockHandLength, clockHandPaint);
            break;
    }
}

private void drawArc(Canvas canvas, float angle, int radius, Paint paint) {
    setAppropriateRectForInnerCircle(canvasCenter, radius);
    canvas.drawArc(innerRect, STARTING_ANGLE_FOR_CIRCLE_DRAWING, angle, true, paint);
}

private void drawLine(Canvas canvas, float angle, int length, Paint paint) {
    canvas.drawLine(canvasCenter.getX(), canvasCenter.getY(),
            calculateCoordinateOfRotation(Coordinate.X, angle, length),
            calculateCoordinateOfRotation(Coordinate.Y, angle, length), paint);
}

1 Ответ

0 голосов
/ 21 января 2019

Обычно зависимость вводится при создании экземпляра класса через конструктор. Нет необходимости передавать его для каждого частного метода или любого метода в классе. Сохраняйте ссылку на экземпляр зависимого класса в виде поля.

Class A{
 B b;
 A(B bb){
 this.b=bb
 }

 private void someMethod(){
 //use b if required
 }
}

где B - некоторый класс, от которого зависит.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...