0
我打造專業化工廠在Groovy中,此代碼的工作,但我認爲,這個代碼可以提高(或降低):如何在Groovy/Grails中定義工廠方法?
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
}
我得到一個:ERROR errors.GrailsExceptionResolver - 空對象不能調用方法findDirPathByName(nanostring)(如果我不在工廠,我可以致電此服務)。
爲什麼?
謝謝。
快速回答最後一部分。您只能在應用程序中的某些地方獲得服務注入(控制器,服務,可能還有一兩個)。您不會在域中注入服務,也不會在src/groovy中創建類。 – billjamesdev 2010-06-24 04:46:54
@Bill - 域類默認是可注入的,我很確定src/groovy中的任何類都是可注入的,儘管後者可能需要一些配置 – 2010-06-24 07:35:51
我嘗試將我的工廠方法部分移至/ services,但是我得到同樣的錯誤。在我的文件夾服務中,我應該獲得服務注入。 – 2010-06-24 15:05:36