سؤال

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

Trip trip = new Trip("Austria2009");

foreach(User user in trip.People.Crew.IsApproved())
{
    reponse.write(user.Firstname);
}

// Or I could hack some of the stuff off above and make it look like this
foreach(User user in trip.People.Crew)
{
    reponse.write(user.Firstname);
}

// Or yet again pull all the people back and forget a specific role
foreach(User user in trip.People)
{
    reponse.write(user.Firstname);
}

فهل هذه الأشياء في حلقة foreach مما يجعل أي لعق من المعنى؟ : PI يشعر وكأنني أحاول إنشاء نوع من واجهة بطلاقة مع فصولي. أنا أستخدم Thhibernate للحصول على الثبات، فهل هذا شيء من هذا القبيل ممكن أو هل أحتاج إلى جعل الأمور أكثر بساطة أكثر بساطة؟

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

المحلول

على افتراض أن هذه الرحلة هي IQueryable، يمكن كتابة واجهة بطلاقة بسهولة إلى حد ما مع استعلامات LinQ وأساليب التمديد. ملاحظة: لا يتم اختبار التعليمات الففتراضية التالية.

public static class MyExtensions
{
    public static IQueryable<Person> People(this IQueryable<Person> source)
    {
        return from person in source
               select person;
    }

    public static IQueryable<Person> Crew(this IQueryable<Person>  source)
    {
        return from person in source
               where person.type == crewMember
               select person;
    }
    public static IQueryable<Person> IsApproved(this IQueryable<Person>  source)
    {
        return from person in source
               where person.IsApproved == true
               select person;
    }
}

..إلخ. لاحظ استخدام كلمة الكلمة الرئيسية "هذه" في قائمة المعلمة من كل طريقة. يسمح ذلك للطريقة التي يجب استدعاؤها عن طريق التنقيط بأي مصدر Iqueryable، كما هو الحال في:

var crew = myPersons.Crew();
var approvedCrew = myPersons.Crew().IsApproved();

ملاحظة: لا أعتقد أن هناك طريقة للقضاء على الأقواس باستخدام هذه التقنية. للقيام بذلك، ستحتاج إلى استخدام الخصائص، و C # لا يدعم "خصائص التمديد"، فقط "طرق التمديد".

مزيد من المعلومات هنا: http://en.wikipedia.org/wiki/fluent_interface.

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