В пределах MainBoard
boardSize
фактически является константой. Вы хотите, чтобы существовало только одно значение. Вам нужен код вроде этого:
int boardSize = 24; // Or maybe you get this from reading a file or command line
MainBoardScope mainBoardScope = new mainBoardScope( boardSize );
Если бы вы наивно сделали 24 глобальным или константным, у вас бы здесь были трудно различимые зависимости, потому что классы полагались бы на выбор этой константы или глобально статически, а не через объявленный интерфейс (т.е. конструктор). 1006 *
mainBoardScope
содержит "синглтоны" для группы объектов с одинаковым временем жизни. В отличие от синглтонов старой школы, они не являются глобальными и не доступны статически. Затем рассмотрим код, который запускается при запуске приложения (или этой области в более крупном приложении) для построения графа объектов:
MainBoardFactory factory = new MainBoardFactory( mainBoardScope );
MainBoard board = factory.createMainBoard();
В этом методе createMainBoard
вы будете использовать boardSize
из области действия для создания трех вложенных плат:
IBoardType1 b1 = injectBoardType1( myScope );
IBoardType2 b2 = injectBoardType2( myScope );
IBoardType3 b3 = injectBoardType3( myScope );
return new MainBoard( scope.getBoardSize, b1, b2, b3 );
Вам нужна MainBoard для проверки правильности размеров каждой из трех досок, переданных конструктору? Если это ваш код создания плат, то создайте модульный тест для injectMainBoard()
. Это не работа MainBoard, чтобы гарантировать, что это построено правильно. Это работа фабрики по ее созданию, это модульное тестирование работы фабрики, чтобы проверить, что все сделано правильно.