इस रणनीति में इस तरह की जगह शामिल है:
public class Politician
{
public const int Infidelity = 0;
public const int Embezzlement = 1;
public const int FlipFlopping = 2;
public const int Murder = 3;
public const int BabyKissing = 4;
public int MostNotableGrievance { get; set; }
}
साथ में:
public class Politician
{
public MostNotableGrievance MostNotableGrievance { get; set; }
}
public class MostNotableGrievance
{
public static readonly MostNotableGrievance Infidelity = new MostNotableGrievance(0);
public static readonly MostNotableGrievance Embezzlement = new MostNotableGrievance(1);
public static readonly MostNotableGrievance FlipFlopping = new MostNotableGrievance(2);
public static readonly MostNotableGrievance Murder = new MostNotableGrievance(3);
public static readonly MostNotableGrievance BabyKissing = new MostNotableGrievance(4);
public int Code { get; private set; }
private MostNotableGrievance(int code)
{
Code = code;
}
}
क्यों इस प्रकार, इस तरह की गणना करने के लिए यह बेहतर है:
public class Politician
{
public MostNotableGrievance MostNotableGrievance { get; set; }
}
public enum MostNotableGrievance
{
Infidelity = 0,
Embezzlement = 1,
FlipFlopping = 2,
Murder = 3,
BabyKissing = 4
}
इस प्रकार से जुड़ा कोई व्यवहार नहीं है और अगर वहाँ था तो आप किसी भी प्रकार के रिफैक्टरिंग रास्ते का उपयोग कर रहे होंगे, उदाहरण के लिए, 'प्रतिस्थापन प्रकार को उपवर्गों के साथ बदलें' + 'पॉलीमॉर्फ के साथ सशर्त बदलें'।
हालाँकि, लेखक यह समझाता है कि वह इस पद्धति पर क्यों (जावा में?):
संख्यात्मक प्रकार के कोड, या गणना, सी-आधारित भाषाओं की एक सामान्य विशेषता है। प्रतीकात्मक नामों के साथ वे काफी पठनीय हो सकते हैं। समस्या यह है कि प्रतीकात्मक नाम केवल एक उपनाम है; संकलक अभी भी अंतर्निहित संख्या देखता है। संकलक प्रकार 177 नंबर का उपयोग करके चेक करता है न कि प्रतीकात्मक नाम। कोई भी विधि जो एक तर्क के रूप में टाइप कोड लेती है, एक संख्या की उम्मीद करती है, और एक प्रतीकात्मक नाम का उपयोग करने के लिए मजबूर करने के लिए कुछ भी नहीं है। यह पठनीयता को कम कर सकता है और कीड़े का स्रोत बन सकता है।
लेकिन जब इस कथन को C # पर लागू करने की कोशिश की जा रही है, तो यह कथन सत्य प्रतीत नहीं होता है: यह एक संख्या को स्वीकार नहीं करेगा क्योंकि एक गणना को वास्तव में एक वर्ग माना जाता है। तो निम्नलिखित कोड:
public class Test
{
public void Do()
{
var temp = new Politician { MostNotableGrievance = 1 };
}
}
संकलन नहीं करेंगे। तो क्या नई # उच्च स्तरीय भाषाओं में, जैसे #, या क्या मैं किसी चीज़ पर विचार नहीं कर रहा हूं, इस रीफैक्टरिंग को आवश्यक नहीं माना जा सकता?
var temp = new Politician { MostNotableGrievance = MostNotableGrievance.Embezzlement };