سؤال

أحتاج إلى بعض المساعدة في أنماط الهندسة المعمارية / التصميم DLL.

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

لديّ ثلاثة فصول هي مغلفة مخصصة لـ ProfileProvider ASP.NET 2.0 ، و Roleprovider.

أرغب في تنفيذ طريقة للاتصال بكل شيء بسيط وبديهي للمطورين. شيء من أجل:

Object obj = new Users().Permissions.CreateRole();
Object obj = = new Users().Membership.CreateUser();
Object obj = = new Users().Profile.GetUserProfile();

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

أي اقتراحات بشأن أفضل الممارسات حول كيفية البدء؟ أو ، حتى أفضل ، الرسوم التوضيحية رمز؟ قون

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

المحلول

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

userService.CreateAdminUser("keith", "godchaux");

ستستخدم فئة Assorervice مزود العضوية لإنشاء مستخدم جديد وتعيين دور المسؤول لهم.

نصائح أخرى

يبدو لي أنك تقوم بإنشاء تجريد أعلى تجريد دون أي غرض حقيقي وبدون فائدة حقيقية. لديّ مشاكل في الطريقة التي تم بها تنفيذ مزودي ASP.NET (من أجل الاختبار) ، لكنني تناولت ذلك بطريقة أخرى.

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

تحرير ، نموذج رمز:

Imembershipservice

// Membership service that just provides Create/Delete
public interface IMembershipService
{
    IMembershipUser CreateUser(string username, string password);
    void DeleteUser(string username);
}

و Imembershipuser

// IMembershipUser that provides a lot of the necessary details
public interface IMembershipUser
{
    string UserName { get; }
    bool IsApproved { get; }
    bool IsLockedOut { get; }
    string Email { get; }
    DateTime LastLoginDate { get; }
    DateTime CreationDate { get; }
    bool ChangePassword(string oldPassword, string newPassword);
    string ResetPassword();
    Guid UserID { get; }
}

وغلاف بسيط لمزود ASP.NET:

public class MembershipWrapper : IMembershipFactory
{
    #region IMembership Members

    public IMembershipUser CreateUser(string email, string password)
    {
        var user = System.Web.Security.Membership.CreateUser(email, password, email);
        return new MembershipUserWrapper(user);
    }

    public void DeleteUser(string userName)
    {
        System.Web.Security.Membership.DeleteUser(userName);
    }

    #endregion
}

والعضوية

    public class MembershipUserWrapper : IMembershipUser
{
    private MembershipUser _User;
    public MembershipUserWrapper(MembershipUser user)
    {
        _User = user;
    }
    #region IMembershipUser Members

    public string ResetPassword()
    {
        return _User.ResetPassword();
    }

    public bool ChangePassword(string oldPassword, string newPassword)
    {
        return _User.ChangePassword(oldPassword, newPassword);
    }

    public string UserName
    {
        get { return _User.UserName; }
    }

    public bool IsApproved
    {
        get { return _User.IsApproved; }
    }

    public bool IsLockedOut
    {
        get { return _User.IsLockedOut; }
    }

    public string Email
    {
        get { return _User.Email; }
    }

    public DateTime LastLoginDate
    {
        get { return _User.LastLoginDate; }
    }

    public DateTime CreationDate
    {
        get { return _User.CreationDate; }
    }

    public Guid UserID
    {
        get { return (Guid)_User.ProviderUserKey; }
    }

    #endregion
}

تطبيق بسيط للغاية ، ولكن يمكنك الذهاب إلى المدينة معها.

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