سؤال

في فئة قابلة للتغيير جزئيًا ، هل من الأفضل مزج الحقول القابلة للتغيير مع الحقول غير القابلة للتغيير ، أو إنشاء فئة جديدة (أو فئات) تغلفها؟ إليك مثال في C# لما أتحدث عنه:

interface IBedroom
{
    int Volume { get; }

    string Color { get; }

    void Paint(string newColor);
}

فيما يلي تطبيق مع قابلية التبديل المختلط في مجالاتها:

class MixedMutabilityBedroom : IBedroom
{
    readonly int volume;
    string color;

    public MixedMutabilityBedroom(int volume, string color = "")
    {
        this.volume = volume;
        this.color = color;
    }

    public int Volume
    {
        get { return volume; }
    }

    public string Color
    {
        get { return color; }
    }

    public void Paint(string newColor)
    {
        color = newColor;
    }
}

وواحد ذو قابلية منفصلة:

// first, a fully mutable helper class
class RoomColor
{
    string value;

    public RoomColor(string value)
    {
        this.value = value;
    }

    public string Value
    {
        get { return value; }
    }

    public void Change(string newValue)
    {
        value = newValue;
    }
}

وتنفيذ قابلية الانفصال:

class SeparatedMutabilityBedroom : IBedroom
{
    readonly int volume;
    readonly RoomColor color;

    public SeparatedMutabilityBedroom(int volume, RoomColor color)
    {
        this.volume = volume;
        this.color = color;
    }

    public int Volume
    {
        get { return volume; }
    }

    public string Color
    {
        get { return color.Value; }
    }

    public void Paint(string newColor)
    {
        color.Change(newColor);
    }
}

أنا شخصيا مع الأسلوب الأخير. في تجربتي ، يصعب تصحيح الأخطاء التي تنشأ عن التلاعب بالدولة في السيناريوهات المتزامنة. نظرًا لأن التزامن يصبح هو المعيار للبرامج ، يبدو أن توطين التكيف هو عامل رئيسي في تقليل جهد تصحيح الأخطاء. في المثال الثاني ، لا يتعين علينا أن ننظر في تطبيق الفصل بأكمله لمعرفة مكان التلاعب بالدولة. كامل SeparatedMutabilityBedroomيتم توطين قابلية التكيف إلى RoomColor.

ماذا تعتقد؟ هل نسيت بعض النقاط للنظر فيها؟

هل كانت مفيدة؟

المحلول

تعد البرمجة مع هياكل البيانات غير القابلة للتغيير تقنية مفيدة للغاية ولكن من الصعب نقدها على أفضل الممارسات أو الاقتراح بشكل عام بناءً على مثال بسيط. يجب أن يأخذ تحديد أفضل ما هو في الاعتبار عوامل أخرى مثل كيفية استخدام هذه الفئة والتفاعل معها.

ومع ذلك ، على افتراض أنك في موقف لديه قدر كبير من التزامن مع العديد من الكتاب إلى هذا الكائن ، فإن جعل الكائن غير قابل للتغيير جزئيًا لن يشتري لك كثيرًا لأنه لا يزال بإمكانك مواجهة المشكلات.

في هذه الحالة ، استخدم إما نوعًا من التزامن البدائي أو استخدم كائنًا ثابتًا تمامًا.

هذه إجابه يتحدث عن بعض تقنيات استخدام الأشياء غير القابلة للتغيير تمامًا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top