سؤال

وأنا معالجة XML مع minOccurs وmaxOccurs وضع كثير من الأحيان إما 0 أو 1 أو غير محدود. لدي مخطط يصف هذه العلاقة الأساسية، جنبا إلى جنب مع نوع بيانات محددة. أود أن بناء (دلفي) الطبقة التي يحتفظ من أصل، جنبا إلى جنب مع مجموعة أبعادها هي أن يتم التحقق من صحة استنادا إلى الحقول minOccurs وmaxOccur. وأعتقد أن استخدام المتغيرات هو سوء اختيار التصميم، وسوف تكون على علم تام نوع البيانات قبل أن يتم قراءة (استنادا إلى قواعد مخطط XML).

وأنا جديدة إلى حد ما صافية بوجه عام، ودلفي OOP على وجه الخصوص، لذلك ما هو أفضل الخيارات المتاحة لي هنا؟ أنا حلمت بها شيء من هذا القبيل:

TComplexType = class(TObject)
  FMinOccurs: integer;
  FMaxOccurs: integer;
  FValue:     Array of Variant;
public
  constructor Create(Min: integer; Max: integer);
  procedure AddValue(Value: variant);
  function Validate() : boolean;
end;

وبطبيعة الحال، FValue قد ينتهي به الأمر إلى سلسلة، عدد صحيح، مزدوجة، الخ وهكذا، وأعتقد أنني في حاجة للتخصص:

TComplexString = class(TComplexType)
  FValue:     Array of string;
end;

والآن، هو الطريق الصحيح للذهاب؟ لا بد لي من الزائد ادفاليو (القيمة: SomeType) في جميع فئات مختلفة (كل فئة المقابلة لنوع البيانات)؟ لا يبدو بقعة جدا، وسأكون القيام الى حد كبير نفس الشيء في كل ادفاليو-الأسلوب:

procedure AddValue(Value: SomeType);
begin;
  // 1) Re-shape array
  // 2) Add Value as the last (newly created) element in the array
end;

وأنا أكره حقا أن تفعل هذا من أجل كل نوع. (وباعتراف الجميع، لن يكون هناك أن العديد من أنواع، ولكن ما زلت تنظر فيه تصميم معيب، والمحتوى المنطقي هي جميلة متطابقة كثيرا في أساليب طاقتها.) أي نصائح جيدة هناك؟ شكر!

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

المحلول

وأنت لم يحدد نسخة دلفي الخاص بك، ولكن هذا هو مثال كلاسيكي على الأدوية (متوفر في D2009 وأعلى).

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