আমি যে কোডবেসে প্রায়শই কাজ করছি তা বিভিন্ন তুচ্ছ পদ্ধতির মধ্যে ডেটা ভাগ করতে উদাহরণের ভেরিয়েবল ব্যবহার করে। মূল বিকাশকারী অনড় যে এটি আঙ্কেল বব / রবার্ট মার্টিনের ক্লিন কোড বইয়ে বর্ণিত সর্বোত্তম অনুশীলনের সাথে মেনে চলে : "কার্যকারিতার প্রথম নিয়ম হ'ল তাদের ছোট হওয়া উচিত।" এবং "কোনও ক্রিয়াকলাপের জন্য আদর্শ সংখ্যাটি শূন্য (নীলাদিক) ((...) যুক্তিগুলি কঠোর। তারা অনেকগুলি ধারণাগত শক্তি গ্রহণ করে take"
একটি উদাহরণ:
public class SomeBusinessProcess {
@Inject private Router router;
@Inject private ServiceClient serviceClient;
@Inject private CryptoService cryptoService;
private byte[] encodedData;
private EncryptionInfo encryptionInfo;
private EncryptedObject payloadOfResponse;
private URI destinationURI;
public EncryptedResponse process(EncryptedRequest encryptedRequest) {
checkNotNull(encryptedRequest);
getEncodedData(encryptedRequest);
getEncryptionInfo();
getDestinationURI();
passRequestToServiceClient();
return cryptoService.encryptResponse(payloadOfResponse);
}
private void getEncodedData(EncryptedRequest encryptedRequest) {
encodedData = cryptoService.decryptRequest(encryptedRequest, byte[].class);
}
private void getEncryptionInfo() {
encryptionInfo = cryptoService.getEncryptionInfoForDefaultClient();
}
private void getDestinationURI() {
destinationURI = router.getDestination().getUri();
}
private void passRequestToServiceClient() {
payloadOfResponse = serviceClient.handle(destinationURI, encodedData, encryptionInfo);
}
}
আমি স্থানীয় ভেরিয়েবলগুলি ব্যবহার করে নীচে এটি রিফ্যাক্টর করব:
public class SomeBusinessProcess {
@Inject private Router router;
@Inject private ServiceClient serviceClient;
@Inject private CryptoService cryptoService;
public EncryptedResponse process(EncryptedRequest encryptedRequest) {
checkNotNull(encryptedRequest);
byte[] encodedData = cryptoService.decryptRequest(encryptedRequest, byte[].class);
EncryptionInfo encryptionInfo = cryptoService.getEncryptionInfoForDefaultClient();
URI destinationURI = router.getDestination().getUri();
EncryptedObject payloadOfResponse = serviceClient.handle(destinationURI, encodedData,
encryptionInfo);
return cryptoService.encryptResponse(payloadOfResponse);
}
}
এটি সংক্ষিপ্ত, এটি বিভিন্ন তুচ্ছ পদ্ধতির মধ্যে অন্তর্নিহিত ডেটা সংযুক্তিকে সরিয়ে দেয় এবং এটি পরিবর্তনশীল স্কোপগুলিকে ন্যূনতম প্রয়োজনীয়তার মধ্যে সীমাবদ্ধ করে। তবুও এই সুবিধাগুলি সত্ত্বেও আমি এখনও এখনও এই মূল বিকাশকারীকে বোঝাতে পারি না যে এই রিফ্যাক্টরিংটি পুনরায় সাজানো হয়েছে, যেমন এটি উপরে উল্লিখিত আঙ্কেল বব এর অনুশীলনের সাথে বিরোধী বলে মনে হচ্ছে।
সুতরাং আমার প্রশ্নগুলি: উদাহরণ বৈকল্পিকের চেয়ে স্থানীয় ভেরিয়েবলের পক্ষে বৈজ্ঞানিক যুক্তি কী? আমি এটিতে আমার আঙুলটি রাখছি বলে মনে হয় না। আমার অন্তর্নিহিততা আমাকে বলে যে লুকানো কাপলিংগুলি খারাপ এবং একটি সংকীর্ণ সুযোগটি বিস্তৃতের চেয়ে ভাল। তবে এটিকে ব্যাক আপ করার জন্য বিজ্ঞান কী?
এবং বিপরীতভাবে, এই রিফ্যাক্টরিংয়ের কোনও ডাউনসাইড রয়েছে যা আমি সম্ভবত উপেক্ষা করেছি?