यह एक पुराना सवाल है, लेकिन मैं यहाँ वैसे भी पोस्ट करने जा रहा हूँ। मेरे पास कुछ 20+ वर्ष की प्रोग्रामिंग है और अन्य लोगों के कोड के साथ काम कर रहा हूं।
मुझे लगता है कि अपने चर को उनके संकेत के रूप में एक छोटे संकेत के साथ नामित करना वास्तव में अगले व्यक्ति (या अपने आप) के लिए वास्तव में उपयोगी है जो आपके कोड को देखेंगे।
एक पहले से ही सुंदर रंगों के साथ एक आईडीई में कोड को नहीं देखता है (और मुझे याद नहीं है कि रंगों का क्या मतलब है और अलग-अलग आईडीई अलग-अलग रंग दिखाते हैं, आदि)।
यह सच है, विधियाँ पर्याप्त रूप से कम होनी चाहिए, इसलिए यह बहुत सारे वैरिएबल और टन के कोड से भरी हुई नहीं होती है, बल्कि छोटी पर भी - जब आप ऐसे कोड को देखते हैं जो पूरी तरह से अपरिचित है, तो यह बताना कभी-कभी कठिन होता है कि क्या एक वैरिएबल एक वैरिएबल, स्थानीय है चर या विधि पैरामीटर।
एक नज़र में अंतर करने में सक्षम होने के लिए आपके द्वारा अपरिचित कोड की समीक्षा करना बहुत आसान है।
इस उदाहरण को लें:
public <T> Page<T> moreLikeThis(MoreLikeThisQuery query, Class<T> clazz) {
int startRecord = 0;
ElasticsearchPersistentEntity persistentEntity = getPersistentEntityFor(clazz);
String indexName = isNotBlank(query.getIndexName()) ? query.getIndexName() : persistentEntity.getIndexName();
String type = isNotBlank(query.getType()) ? query.getType() : persistentEntity.getIndexType();
Assert.notNull(indexName, "No 'indexName' defined for MoreLikeThisQuery");
Assert.notNull(type, "No 'type' defined for MoreLikeThisQuery");
Assert.notNull(query.getId(), "No document id defined for MoreLikeThisQuery");
MoreLikeThisRequestBuilder requestBuilder = client.prepareMoreLikeThis(indexName, type, query.getId());
if (query.getPageable() != null) {
startRecord = query.getPageable().getPageNumber() * query.getPageable().getPageSize();
requestBuilder.setSearchSize(query.getPageable().getPageSize());
}
requestBuilder.setSearchFrom(startRecord);
if (isNotEmpty(query.getSearchIndices())) {
requestBuilder.setSearchIndices(toArray(query.getSearchIndices()));
}
if (isNotEmpty(query.getSearchTypes())) {
requestBuilder.setSearchTypes(toArray(query.getSearchTypes()));
}
if (isNotEmpty(query.getFields())) {
requestBuilder.setField(toArray(query.getFields()));
}
if (isNotBlank(query.getRouting())) {
requestBuilder.setRouting(query.getRouting());
}
if (query.getPercentTermsToMatch() != null) {
requestBuilder.setPercentTermsToMatch(query.getPercentTermsToMatch());
}
if (query.getMinTermFreq() != null) {
requestBuilder.setMinTermFreq(query.getMinTermFreq());
}
if (query.getMaxQueryTerms() != null) {
requestBuilder.maxQueryTerms(query.getMaxQueryTerms());
}
if (isNotEmpty(query.getStopWords())) {
requestBuilder.setStopWords(toArray(query.getStopWords()));
}
if (query.getMinDocFreq() != null) {
requestBuilder.setMinDocFreq(query.getMinDocFreq());
}
if (query.getMaxDocFreq() != null) {
requestBuilder.setMaxDocFreq(query.getMaxDocFreq());
}
if (query.getMinWordLen() != null) {
requestBuilder.setMinWordLen(query.getMinWordLen());
}
if (query.getMaxWordLen() != null) {
requestBuilder.setMaxWordLen(query.getMaxWordLen());
}
if (query.getBoostTerms() != null) {
requestBuilder.setBoostTerms(query.getBoostTerms());
}
SearchResponse response = requestBuilder.execute().actionGet();
return resultsMapper.mapResults(response, clazz, query.getPageable());
}
अब, अपने आप को समय दें और कोड को देखें (स्प्रिंग-डेटा-इलास्टिक्सखोज परियोजना से एलीस्टेकटाइटप्लेट से निकाले गए - मैं जिस कोड की समीक्षा कर रहा था जिसने मुझे Google पर खोज करने के लिए प्रेरित किया कि लोग नामकरण परंपराओं के बारे में क्या कहते हैं)।
- का स्कॉड क्या है
resultsMapper
?
- है
requestBuilding
एक पैरामीटर?
- आदि...
यहाँ मेरा सरल सुझाव है कि चर का नाम कैसे रखा जाना चाहिए:
- क्लास स्टैटिक विशेषताएँ (अर्थात स्थिरांक): ALL_CAPS_WITH_UNDERSCORES (उदा
HOST_NAME
)।
- वर्ग गुण (यानी वर्ग उदाहरण चर): कैमलकेस (जैसे
resultsMapper
)।
- विधि पैरामीटर: उपसर्ग के साथ
a
(जैसे aQuery
, aClazz
)।
- स्थानीय चर: उपसर्ग के साथ
my
(जैसे myIndexName
, myType
)।
उपरोक्त कोड बन जाता है:
public <T> Page<T> moreLikeThis(MoreLikeThisQuery aQuery, Class<T> aClazz) {
int myStartRecord = 0;
ElasticsearchPersistentEntity myPersistentEntity = getPersistentEntityFor(aClazz);
String myIndexName = isNotBlank(aQuery.getIndexName()) ? aQuery.getIndexName() : myPersistentEntity.getIndexName();
String myType = isNotBlank(aQuery.getType()) ? aQuery.getType() : myPersistentEntity.getIndexType();
Assert.notNull(myIndexName, "No 'indexName' defined for MoreLikeThisQuery");
Assert.notNull(myType, "No 'type' defined for MoreLikeThisQuery");
Assert.notNull(aQuery.getId(), "No document id defined for MoreLikeThisQuery");
MoreLikeThisRequestBuilder myRequestBuilder = client.prepareMoreLikeThis(myIndexName, myType, aQuery.getId());
if (aQuery.getPageable() != null) {
myStartRecord = aQuery.getPageable().getPageNumber() * aQuery.getPageable().getPageSize();
myRequestBuilder.setSearchSize(aQuery.getPageable().getPageSize());
}
myRequestBuilder.setSearchFrom(myStartRecord);
if (isNotEmpty(aQuery.getSearchIndices())) {
myRequestBuilder.setSearchIndices(toArray(aQuery.getSearchIndices()));
}
if (isNotEmpty(aQuery.getSearchTypes())) {
myRequestBuilder.setSearchTypes(toArray(aQuery.getSearchTypes()));
}
if (isNotEmpty(aQuery.getFields())) {
myRequestBuilder.setField(toArray(aQuery.getFields()));
}
if (isNotBlank(aQuery.getRouting())) {
myRequestBuilder.setRouting(aQuery.getRouting());
}
if (aQuery.getPercentTermsToMatch() != null) {
myRequestBuilder.setPercentTermsToMatch(aQuery.getPercentTermsToMatch());
}
if (aQuery.getMinTermFreq() != null) {
myRequestBuilder.setMinTermFreq(aQuery.getMinTermFreq());
}
if (aQuery.getMaxQueryTerms() != null) {
myRequestBuilder.maxQueryTerms(aQuery.getMaxQueryTerms());
}
if (isNotEmpty(aQuery.getStopWords())) {
myRequestBuilder.setStopWords(toArray(aQuery.getStopWords()));
}
if (aQuery.getMinDocFreq() != null) {
myRequestBuilder.setMinDocFreq(aQuery.getMinDocFreq());
}
if (aQuery.getMaxDocFreq() != null) {
myRequestBuilder.setMaxDocFreq(aQuery.getMaxDocFreq());
}
if (aQuery.getMinWordLen() != null) {
myRequestBuilder.setMinWordLen(aQuery.getMinWordLen());
}
if (aQuery.getMaxWordLen() != null) {
myRequestBuilder.setMaxWordLen(aQuery.getMaxWordLen());
}
if (aQuery.getBoostTerms() != null) {
myRequestBuilder.setBoostTerms(aQuery.getBoostTerms());
}
SearchResponse myResponse = myRequestBuilder.execute().actionGet();
return resultsMapper.mapResults(myResponse, aClazz, aQuery.getPageable());
}
क्या यह सही है? मुझे ऐसा नहीं लगता। लेकिन ऊपर, जहां तक चर का संबंध है, अब पढ़ना आसान है। इस तरह के संरेखण और रिक्ति के रूप में अन्य चीजें हैं, जो मुझे इस उत्तर में नहीं मिलेंगी क्योंकि यह प्रश्न से संबंधित नहीं है, जिससे इसे पढ़ने में भी आसानी होगी।
आपको ऊंट केस पसंद नहीं है? ठीक है, अंडरस्कोर आदि का उपयोग करें, लेकिन अपने स्थानीय चरों और अपने मापदंडों को उपसर्ग करें ताकि उन्हें कक्षा के उदाहरण चर से अलग बना सकें।
आपको पसंद नहीं है a
और my
- ठीक है, बस अपनी परियोजना के भीतर बने रहें और कुछ और का उपयोग करें ... लेकिन कुछ का उपयोग करें।
नियम # 1: परियोजना के भीतर स्थिरता।
नियम # 2: पढ़ने में आसान बनाते हैं और इससे पहले कि वह सीख सकें, पाठक को सब कुछ जानने की आवश्यकता नहीं है।