我有一個句子,它分爲不同的階段。首先,我得到一些屬性(比如,X,Y,Z):分裂或不分裂一個類(在Java中)
public class AnalyzedSentence {
private String X;
private String Y;
private String Z;
public AnalyzedSentence(String sentence) {
extractX();
extractY();
extractZ();
}
// getters, setters
}
然後,我用這些屬性來進一步分析句子得到另一個屬性,比如說,「XYZ」,在這之後我創建下面的類:
public class FinalSentence {
private AnalyzedSentence data;
private String XYZ;
public FinalSentence(String XYZ, AnalyzedSentence data) {
this.data = data;
this.XYZ = XYZ;
}
// getters, setters
}
的工作流程是這樣的:
public class SentenceAnalyzer {
/// ...
public FinalSentence analyze(String sentence) {
AnalyzedSentence as = new AnalyzedSentence(sentence); // every attribute of "as" can be calculated beforehand
String XYZ = SpecialClass.extractXYZ(sentence, as); // extract XYZ (needs a special class), based on as
return new FinalSentence(XYZ, as);
}
}
或者,因爲他們提取我可能只是一個類來保存所有信息,填充屬性,這可能RESU在一些空結果。它會是這樣的:
public class Sentence {
private String X;
private String Y;
private String Z;
private String XYZ;
public Sentence(String sentence) {
extractX();
extractY();
extractZ();
}
public String getXYZ() {
// with this design, this method can be called, even if XYZ was not extracted yet.
// remember that XYZ cannot be extracted as X,Y,Z
}
public void setXYZ(...) {...}
// getters, setters
}
我的問題是:哪個設計是首選,爲什麼?如果還有更好的方法來完成我在這裏要做的事情,我也想聽聽它。
你能給什麼這些類做一個具體的例子嗎?例如。會給出什麼樣的價值,他們會返回什麼? – chrisbunney 2009-07-19 07:45:29
是的,我有一個管道系統,其中管道的第一個模塊是SentenceAnalyzer,其目標是返回可傳遞給管道其他組件的對象。這個對象是FinalSentence/Sentence。 在第一種情況下,屬性X,Y和Z表示可以從句子中獨立提取的數據,例如POS標籤(名詞,動詞,物品),人名等。然而,XYZ屬性不能獨立提取,並需要一個特殊的課程來完成。它代表了句子的「範疇」,如「體育」。 – 2009-07-19 11:16:51
此外,用於提取XYZ的類需要我傳遞包含提取所需的所有內容的單個對象,因此需要將「AnalyzedSentence」傳遞給它。這個類的接口是:public class Extractor {String extract(E); }因此,我聲明瞭一個Extractor ,這樣我就可以在提取方法中獲得分析的句子數據。這就是爲什麼我認爲這些類應該被拆分的原因之一,因爲提取器不應該接收一個具有額外字段(XYZ)的類,這個字段與它所提取的內容相對應。 –
2009-07-19 11:38:30