سؤال

يغفر غامضة العنوان, لم أكن متأكدا كيف أصف ذلك.

إذا كان لديك نموذج عام "الأرشيف" ، كيف تظهر وجهات نظر مختلفة/أشكال استنادا إلى المستخدم المحدد نوع'?

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

أو سيكون من الأفضل تقسيمها إلى نماذج مختلفة - فيديو, كتاب, الصوت ؟

أو يمكن أن نماذج ترث (مثل الفيديو يمتد الأرشيف).أعتقد أن هذا هو الأساسية OOP / الطبقات ، ولكن ليس لديهم فكرة عن كيفية تطبيق ذلك هنا.

أمثلة من أي إطار MVC هي موضع ترحيب!

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

المحلول

يبدو أنك لا تريد أن يكون نوع ترث من الأرشيف."دائما لصالح تغليف/الاحتواء على الميراث".

لماذا لا إنشاء فئة تسمى الأرشيف وإعطائها نوع المنشأة.نوع يمكن استخدام الميراث أن تتخصص الصوت, الفيديو, الخ.

يبدو أنك تتخصص الأرشيف استنادا إلى بعض المعايير الأخرى."FileSystemArchivce", "XMLArchive", "SQLArchive" ونوع لن تتغير.ولكن agilist في لي يقول أن هذا قد لا يكون necesscary في البداية ، يمكنك دائما ريفاكتور التصميم في وقت لاحق...

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

نصائح أخرى

أن تظهر في الواقع وجهة نظر مختلفة يجب أن يكون من السهل في أي إطار MVC.على سبيل المثال ، في Microsoft ASP.NET MVC كنت لا مجرد عودة من تحكم مثل التالية:

return View();

ولكن في الواقع الدولة اسم عرض كمعلمة:

return View("VideoArchive");

ثم عرض رأي من آراء/الأرشيف/VideoArchive.aspx

النماذج الخاصة بك فيديو, كتاب والصوت يمكن أن ترث من الأرشيف.

و كل نموذج يكون وحدة تحكم.

http://yourserver/Books/Edit/11

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

تحرير (ردا على التعليق)

في ASP.NET MVC النموذج الخاص بك سوف تكون فئة.

public class Video : Archive
{  
    public int Id {get;set}
    public string Name {get;set;}     
    ...
}

سيكون لديك أيضا وحدة تحكم

public class VideoController : Controller
{
    public object Edit(int id)
    {
        Video myVideo = GetVideo(id);
        return View("Edit", myVideo);
    }
     ...
}

وسوف يكون لها رأي في وجهات النظر دليل على سبيل المثال ، الصفحة التي تحتوي على

public class Edit : View<Video>
{
    ...
}

لذلك يمكنك استدعاء هذا إذا كان لديك عنوان URL الذي كان

http://localhost/Video/Edit/11

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

يبدو لي أن أحد الصلبة نقطة لصالح MVC هو أنك قد لا تحتاج إلى تخصيص نموذج (أو تحكم - من الذي كنت تريد فقط واحد) إذا كان كل ما يحتاجه المستخدم هو وجهة نظر مختلفة.نماذج متعددة من شأنها أن تظهر إلا إذا كان التخزين (استمرار) العمارة تمليها الحاجة إلى ذلك.بعض المعالم مثل كائنات الوصول إلى البيانات (DAO) يحتمل أن تظهر فئة أخرى بين تحكم نموذج,إذا كنت بحاجة إلى نماذج متعددة.

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

عن مورد آخر ، انظر ويب-الطبقة إطار تطبيق التصميم (الشمس J2EE المخططات)

على واحد مبدأ المسؤولية (PDF) على أن:

ويجب أن لا يكون أكثر من سبب واحد لفئة إلى تغيير.

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

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

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

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

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