Я купил фабрику в Groovy, этот код работает, но я думаю, этот код можно улучшить (или уменьшить):
abstract class Processing {
abstract getDirName();
abstract getFileType();
abstract moveFile();
abstract processFile();
abstract openFile();
abstract closeFile();
}
class ProcessingBuilder {
def processingFactory
def orderProcess(String type) {
def process = processingFactory.buildProcessing(type);
process.getDirName();
process.getFileType();
process.moveFile();
process.processFile();
process.openFile();
process.closeFile();
return process;
}
}
class ProcessingFactory {
def buildProcessing(String type) {
def process = null;
if (type == "nanostring") {
process = new ProcessingNanoString();
} else if (type == "flowcore") {
process = new ProcessingFlowCore();
}
return process;
}
}
class ProcessingFlowCore extends Processing {
def getDirName() {
println "--> Get FlowCore directory structure"
}
def getFileType() {
println "--> Get FlowCore File Type"
}
def moveFile() {
println "--> Move FlowCore Files"
}
def processFile() {
println "--> Import FlowCore files to DB"
}
def openFile() {
println "--> Open FlowCore files"
}
def closeFile() {
println "--> Close FlowCore files"
}
}
Чтобы использовать эту фабрику:
def processingFactory = new ProcessingFactory();
def processingBuilder = new ProcessingBuilder(processingFactory : processingFactory);
def process = processingBuilder.orderProcess("flowcore");
Есть ли лучший способ построить фабрику с использованием groovy / grails?
Я также экспериментирую с ошибками, если пытаюсь использовать службы в своем классе ProcessingFlowCore: например:
class ProcessingNanoString extends Processing {
def directoryToolsService
def getDirName() {
println "--> Get NanoString directory structure"
def dir = directoryToolsService.findDirPathByName(nanostring).directoryPath
return dir
}
Я получаюa: ERROR errors.GrailsExceptionResolver - Невозможно вызвать метод findDirPathByName (nanostring) для нулевого объекта. (Я могу вызвать этот сервис, если я не на фабрике).
Почему?
Спасибо.