إعادة استخدام بنية MVC؛لديك طبقتين من واجهة المستخدم:ASP.NET MVC و.NET Winforms

StackOverflow https://stackoverflow.com/questions/124358

سؤال

على الرغم من أن سؤالي قد يبدو مجردًا، إلا أنني آمل ألا يكون كذلك.لنفترض أنني قمت بتطوير تطبيق وموقع ASP.NET MVC وبعد ذلك تم تكليفي ببناء عميل Winforms لهذا التطبيق، ما مقدار وكيف يمكنني إعادة الاستخدام من التطبيق الحالي؟

لقد حددت النماذج، وحددت وحدات التحكم وطرق العرض.انهم جميعا يعملون بشكل جيد.

الآن يأتي الرئيس ليطلب عميل Winforms وآمل أن أتمكن من إعادة استخدام النماذج ووحدات التحكم (بشرط أن أضعها في مجموعات مختلفة) وليس إعادة استخدام طرق العرض فقط (طرق عرض ASPX).

هل يمكن هذا؟كيف؟

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

المحلول

لقد قمت بذلك سابقًا، ليس باستخدام asp.net MVC ولكن باستخدام نماذج الويب asp.net الخالصة.لقد استخدمت نمط MVP (Model-View-Presenter) محليًا، وكان الشيء الأكثر أهمية على الإطلاق للسماح باستخدام المقدم (== وحدة التحكم في حالتك) في تطبيق WinForms هو عدم الإشارة أي شئ للقيام مع system.web

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

مثال:

تخيل أنك تريد نقل التحكم من الصفحة "أ" إلى الصفحة "ب" (والتي قد ترغب في إغلاق النموذج "أ" ثم فتح النموذج "ب" في تطبيق winforms الخاص بك).

واجهه المستخدم:

public interface IRuntimeContext
{
  void TransferTo(string destination);
}

تنفيذ الويب:

public class AspNetRuntimeContext
{
  public void TransferTo(string destination)
  {
    Response.Redirect(destination);
  }
}

تنفيذ Winforms:

public class WinformsRuntimeContext
{
  public void TransferTo(string destination)
  {
    var r = GetFormByName(destination);
    r.Show();
  }
}

الآن المقدم (وحدة التحكم في حالتك):

public class SomePresenter
{
  private readonly runtimeContext;
  public SomePresenter(IRuntimeContext runtimeContext)
  {
    this.runtimeContext = runtimeContext;
  }

  public void SomeAction()
  {
    // do some work

    // then transfer control to another page/form
    runtimeContext.TransferTo("somewhereElse");
  }
}

لم ألقي نظرة على تطبيق asp.net MVC بالتفصيل ولكني آمل أن يعطيك هذا بعض المؤشرات على أنه من المحتمل أن يتطلب الأمر الكثير من العمل لتمكين السيناريو الذي تبحث عنه.

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

حظ سعيد!

نصائح أخرى

الق نظرة على طقم بداية نورثويند (لا تتأخر عن Northwind bit) - التي تحتوي على العديد من واجهات المستخدم الرسومية المرتبطة ببنية متعددة الطبقات بما في ذلك MVC وWinforms.

إنه يفعل بالضبط ما تريد تحقيقه.

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