Я работаю над API, который взаимодействует с частной аппаратной частью. В этом API я создал вспомогательный класс (для этого поста назовем его B
), состоящий только из static
методов. Большинство из этих методов зависят от другого класса для связи с оборудованием, назовем это A
. В настоящее время я немного не уверен, как спроектировать зависимость B
от A
, так как я не могу создать экземпляр B
и внедрить зависимость с помощью инжектора конструктора. С точки зрения дизайна, как лучше всего моделировать это поведение?
Для более подробного описания вот то, чего я пытаюсь достичь. Допустим, A
имеет объявления некоторых других классов, например, так:
class A
{
private HardwareCommunicator communicator;
private ModelLoader modelLoader;
public HardwareCommunicator getCommunicator()
{
return communicator;
}
public ModelLoader getModelLoader()
{
return modelLoader;
}
}
И B
, а затем имеет static
методы вроде этого, которые стремятся использовать некоторые члены, объявленные в A
* 1016. *
class B
{
public static PerformOperation()
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, hardwareCommunicator.getCommunicator()); // Needs reference
}
}
Очевидно, что B
нужна ссылка на A
, поэтому в настоящее время я возился с передачей зависимости в качестве аргумента методу, например:
class B
{
public static PerformOperation(HardwareCommunicator communicator) // Passed as argument
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, communicator.doSomething()); // OK, so far so good
}
}
Теперь ястолкнуться с проблемой, что мне иногда нужно на больше зависимостей, чем просто communicator
в B
, например, в другом методе static
в B
мне могут понадобиться как HardwareCommunicator
, так и ModelLoader
class B
{
public static SomeOtherOperation(HardwareCommunicator communicator)
{
AnotherClass c = new AnotherClass();
c.SomeMethod(someValue, communicator.doSomething(),
ModelLoader.getModelLoader()); // Missing reference
}
}
ОК, поэтому я мог бы просто передать это как параметр, но теперь я думаю, что у меня архитектурная проблема. Я должен (не так ли?) Быть в состоянии просто пойти
class B
{
public static SomeOtherOperation()
{
AnotherClass c = new AnotherClass();
c.someMethod(someValue, instanceOfA.getCommunicator(),
instanceOfA.getModelLoader());
}
}
Без возможности вызвать конструктор на B
и передать экземпляр A
Я, очевидно, не могу этого достичьповедение.
Чего мне не хватает? Спасибо.