এটি একটি পুরানো প্রশ্ন, তবে আমি যাইহোক এখানে পোস্ট করতে যাচ্ছি। আমার কাছে প্রায় 20+ বছর ধরে প্রোগ্রামিং এবং অন্যান্য লোকের কোড নিয়ে কাজ করার দরকার আছে।
আমি মনে করি যে আপনার পরিবর্তনকে তাদের স্কোপ হিসাবে একটি সংক্ষিপ্ত ইঙ্গিত দিয়ে নামকরণ করা পরবর্তী ব্যক্তির (বা নিজেকে) যারা আপনার কোডটি দেখবে তার পক্ষে সত্যই কার্যকর।
কোনও আইডিইতে ইতিমধ্যে সুন্দর রঙের কোডটির দিকে নজর নেই (এবং রঙগুলির অর্থ কী এবং বিভিন্ন IDE বিভিন্ন রঙ প্রদর্শন করে তা আমি মনে করতে পারি না))।
সত্য, পদ্ধতিগুলি যথেষ্ট সংক্ষিপ্ত হওয়া উচিত যাতে এটি প্রচুর পরিমাণে ভেরিয়েবল এবং টন কোড দিয়ে বোঝানো হয় না তবে সংক্ষিপ্ত একটিতেও - আপনি যখন কোডটি পুরোপুরি অপরিচিত দেখেন তখন কখনও কখনও কোনও ভেরিয়েবল শ্রেণীর পরিবর্তনশীল, স্থানীয় কিনা তা বলা শক্ত হয় পরিবর্তনশীল বা পদ্ধতি পরামিতি।
এক নজরে আলাদা করতে সক্ষম হওয়া কোডটির সাথে পর্যালোচনা করা আপনার পক্ষে অপরিচিত হওয়া খুব সহজ করে তোলে।
এই উদাহরণটি ধরুন:
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: এটি পড়া সহজ করে তুলুন এবং পাঠক শেখার আগে তার সমস্ত কিছু জানা দরকার না।