نمط التصميم لتطبيق التحويل على خصائص متعددة في فئات متعددة

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

  •  05-07-2019
  •  | 
  •  

سؤال

أنا أستخدم محرر Mordown WMD في مشروع لعدد كبير من الحقول التي تتوافق مع عدد كبير من الخصائص في عدد كبير من فئات الكيانات. قد يكون لبعض الفئات خصائص متعددة تتطلب تخفيض التكلفة.

أنا أقوم بتخزين التخفيضات نفسها لأن هذا يجعل من السهل تعديل الحقول لاحقًا. ومع ذلك ، أحتاج إلى تحويل الخصائص إلى HTML للعرض لاحقًا. والسؤال هو: هل هناك بعض الأنماط التي يمكنني استخدامها لتجنب كتابة رمز التحويل في جميع فئات الكيانات الخاصة بي؟

لقد قمت بإنشاء فئة فائدة مع طريقة تقبل سلسلة التخفيض وإرجاع HTML. أنا أستخدم MarmdownJ وهذا يعمل بشكل جيد.

تكمن المشكلة في كل خاصية لكل فئة تخزن Markdown ، وقد أحتاج إلى طريقة أخرى تتحول إلى HTML:

public class Course{

     private String description;
     .
     .
     .
     public String getDescription(){
          return description;
     }

     public String getDescriptionAsHTML(){
          return MarkdownUtil.convert(getDescription());
     }
     .
     .
     .
 }

تكمن المشكلة في أنه إذا كان لدى فئة الدورة التدريبية رسومين إضافيين ومتطلبات مسبقة تقول ، أن كلا المحولات يحتاجون ، فسيتعين عليّ كتابة getTuitionashtml () و getPrereiseAshtml ().

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

الخيار الآخر الذي أفكر فيه هو القيام بذلك في وحدة التحكم بدلاً من النموذج. ما هي أفكارك حول هذا؟

شكرًا.

تحرير]: أفكار جديدة (شكرا جاسبر). نظرًا لأن المشروع يستخدم Struts2 (لم أقل هذا من قبل) ، يمكنني إنشاء مكون عرض يقول أنه سيقوم بتحويل التخفيض بالنسبة لي. ثم أستخدم ذلك أينما احتجت إلى عرض القيمة كـ HTML.

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

المحلول

الطبقات التي تتطلب هذا ليست جزءًا من التسلسل الهرمي للميراث.

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

الخيار الآخر الذي أفكر فيه هو القيام بذلك في وحدة التحكم بدلاً من النموذج. ما هي أفكارك حول هذا؟

من الواضح أن هذا هو مسؤولية الرأي. قاعدة MVC #1 هي أن النموذج لا يهتم بتمثيله ، والتخفيض في هذه الحالة.

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

نصائح أخرى

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

يمكنك استخدام التفكير للتكرار على خصائصك وتطبيق التنسيق عليها. يمكنك إما وضع علامة عليها بسمة أو يمكنك تبني مخطط تسمية (هش ، ولكن لا يزال خيارًا).

بتجاهل المشكلات المعمارية ، أعتقد أن الإجابة البسيطة يمكن أن تكون:

public String getDescription(MarkDownUtil converter)
{
    if (converter == null) return description;
    else return MarkdownUtil.convert(description);
}

والأفضل من ذلك هو جعل MarmownUtil تنفيذ isTringConverter ، ويمكن أن يكون لديك العديد من stringConverters مختلفة لوظائف مختلفة.

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