سؤال

ولدي وظيفة التي تحدد الإحداثيات على الصفحة، وأنا عائد لهم بمثابة

Dictionary<int, Collection<Rectangle>> GetDocumentCoordinates(int DocumentId)

ولكن، في وقت لاحق أحتاج معلومات حول كل صفحة - إذا تم التحقق من صحة ذلك، ما هو القرار الصفحة، لون / وزن الجسم، وما إلى ذلك يمكن أن يخلق وظيفة أخرى، وتعمل من خلال حد كبير بنفس النتيجة على النحو الدالة السابقة والحصول على تلك المعلومات.

Dictionary<int, PageInfo> GetDocumentAttributes(int DocumentId)

وثمة بديل آخر يتمثل في إضافة معلمة ref حتى أتمكن من الحصول على هذه القيم مرة أخرى.

Dictionary<int, Collection<Rectangle>> GetCoordinates(int DocumentId, ref Dictionary<int, PageInfo> PageAttributes)

ولكن ثمة بديل آخر هو خلق طبقة شمولا الذي يحتوي على قاموس والمعلومات الصفحة:

class DocumentInfo
{
    Dictionary<int, Collection<Rectangle>> Coordinates { get; set;}
    Dictionary<int, PageInfo> PageAttributes { get; set; }
}

ومن ثم تحديد:

DocumentInfo GetDocumentInfo(int DocumentId);

وأنا يميل نحو الخيار الأخير، ولكن هي محل تقدير والرؤى الخاصة بك كثيرا.

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

المحلول

والخيار الأخير هو بالتأكيد أفضل. لقد وجدت أنه عندما أخذ أو إرجاع البيانات المعقدة ذات المعاني المتعددة، وخلق نوع معقد لتغليف هذه البيانات هو أفضل الممارسات لعدد من الأسباب.

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

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

نصائح أخرى

ويبدو أن كنت في حاجة الى الكثير من البيانات بها. يجب أن يكون الخيار الأخير على ما يرام، وليس للمد. انها تريد (لتبسيط استخدام Dictionary<,>)، هل يمكن أن تلخص أشياء أكثر قليلا، ولكن الحقيقة أن C # لا مباشرة تدعم خصائص فهرستها اسمه يعني كنت بحاجة فئات قليلة، إلا إذا كنت مجرد التفاف مع طرق مثل:

class DocumentInfo {
    Dictionary<int, Collection<Rectangle>> rectangles = ...
    public Collection<Rectangle> GetRectangles(int index) {
        return rectangles[index]; // might want to clone to
                                  // protect against mutation
    }
    Dictionary<int, PageInfo> pages = ...
    public PageInfo GetPageInfo(int index) {
        return pages[index];
    }

 }

وأنا لست واضحة تماما ما هو int، لذلك لا أستطيع أن أقول ما إذا كان هذا هو المعقول (حتى لقد غادر لتوه وحدها).

وأيضا - مع الخيار الأول، وربما كنت لن تحتاج ref - سيكون كافيا لاستخدام out

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