Существует два основных способа, которыми конструкторы классов могут заполнять зависимости своего класса:
- Заполнение зависимостей класса путем внедрения зависимостей в конструктор.
- Заполнение зависимостей класса с помощью конструктора Параметры для запуска некоторых вычислений в конструкторе. Зависимости создаются на основе результатов расчета. Это может включать использование
new
.
Мне интересно, придерживается ли второй метод хороших методов кодирования, таких как принцип единой ответственности, и действительно ли такого рода функциональность действительно принадлежит конструктору классов. Это кажется удобным, но я не уверен, что это хорошая идея.
Вот пример того, что я имею в виду:
public class VectorSpace
{
// This class depends on an array of Vectors.
Vector[] spanningSet;
// 1. Populate the class dependencies by constructor dependency injection.
public VectorSpace(Vector[] spanningSet)
{
this.spanningSet = spanningSet;
}
// 2. Populate the class dependencies by running some calculations in the constructor.
public VectorSpace(Rect rectangle, int numberOfCellsX, int numberOfCellsY)
{
// Construct this class to make sure the resulting vector space fits the given rectangle, forming a grid.
// Some calculations that ultimately populate the class dependencies go here...
}
// Public methods for performing calculations using the Vectors go here...
}
Это кажется странным, потому что векторное пространство заполняет сетку Похоже на работу, которая выходит за рамки этого класса, но я не знаю, где еще я бы определил этот второй конструктор.
Подходит ли функциональность второго конструктора в этом классе? Если нет, куда бы я переместил это тело конструктора? Стоит ли использовать вместо этого фабричный метод stati c? Должен ли я сделать этот конструктор конструктором другого класса? Может быть, у меня мог бы быть где-то похожий метод, который возвращает массив Векторов, которые я мог бы передать в конструктор внедрения зависимостей, но где бы я определил этот метод?