سؤال

نحن نحاول استخدام نمط Model-View-Presenter (تقريبيًا) في جميع أعمال التطوير الجديدة التي نقوم بها.

أنا مؤمن بشدة بوجود إطار عمل لمساعدة الأشخاص على تلبية متطلبات التصميم، ولدينا عدد قليل من أطر العمل الداخلية لمختلف المكونات المختلفة (التسجيل، وإرسال البريد الإلكتروني، وما إلى ذلك)، لذلك أحاول الحصول على نوع من MVP تم تطوير الإطار.

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

فيما يلي مخطط تقريبي للإطار:

public abstract class Presenter<TView> where TView : IView {
  public virtual T View { get; set; }

  public virtual void Setup(TView view) {
    this.View = view; 
  }
}

public interface IView { }

الطريقة الأساسية التي تعمل بها هي أن أي منظر خلق يرث من IView الواجهة، وتمريرها إلى a مقدم الطبقة التي ترث من Presenter فئة مجردة.

كما ترون أنا أستخدم أدوية .NET العامة بحيث يكون لدى المطور كتابة قوية للعرض عندما يعملون على المقدم (ومن ثم في النهاية فصل دراسي يرث من المقدم).

حتى أتمكن من إعداد مكون تسجيل الدخول الأساسي مثل هذا:

public class Login : Presenter<ILogin> {
  public override Setup(ILogin view){
    base.Setup(view);
    this.View.Login += new EventHandler(login);
  }
  void login(object sender, EventArgs e) { ... }
}

public interface ILogin : IView {
  string Username { get; set; }
  string Password { get; set; }
  event EventHandler Login;
}

لذا كما قلت، يعجبني هذا تمامًا، هناك كتابة إجبارية للمترجم، وطرق عرض مكتوبة بقوة وMVP-يحب نمط.

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

أتساءل عن مدى صحة هذه الحجة حقًا، في العديد من المشاريع التي كنت أتتبع إطار العمل بها (تتراوح من المشاريع المتوسطة إلى الكبيرة) لم أجد أي مثال جيد حيث اعتقدت "أحتاج إلى وجهات نظر متعددة لهذا المقدم" .عندما أرى وظيفة يمكن مشاركتها عبر طرق عرض متعددة، أتساءل عما إذا كان ينبغي ربطها بمقدم معين، أو ما إذا كان ينبغي أن تكون في فصل دراسي أكثر حيادية.

هل إطار العمل الذي أحاول تحقيقه بعيدًا جدًا عن MVP ليتم تسميته بـ MVP؟هل الحاجة إلى الحصول على وجهات نظر متعددة للمقدم هي الهدف الأساسي لـ MVP؟هل من الممكن حتى أن يكون لديك إطار عمل .NET MVP حقيقي مع دعم n-view؟

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

المحلول

لا أرى مشكلة في أسلوبك.لا تحتاج بشكل صارم إلى وجود علاقات رأس بأطراف بين مقدم العرض وطرق العرض - عادةً ما يكون لديك عرض واحد فقط لكل مقدم عرض.الفكرة وراء MVP هي فك الارتباط مقدمو العرض من طرق العرض، بحيث يمكنك تبديل العرض بسهولة أكبر إذا كنت بحاجة إلى ذلك (على سبيل المثال، دعم كل من تطبيق الويب وتطبيق سطح المكتب)، ولكن هذا لا يعني أنه يتعين عليك جعله ديناميكيًا.

اقتراح واحد:أنا عادة توريد IView كمعلمة منشئ لـ Presenter.التنفيذ الملموس IView ثم يقوم بإنشاء المقدم (إما عن طريق التشفير الثابت new Presenter (this) أو باستخدام حاوية IoC للحصول عليها.

نصائح أخرى

قد تجد الإجابات على تنفيذ MVC مع نماذج Windows مفيد عندما يتحدثون عن الخيارات المختلفة عند تنفيذ MVC وMVP

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