Помогите определить модель домена в asp.net - PullRequest
1 голос
/ 06 сентября 2011

Мне нужна помощь в моделировании этого сценария.

У пациента может быть много врачей

У врача может быть много пациентов.

Пациент также является пользователем.(MembershipUser)

Медик также является Пользователем.(MembershipUser)

Они совершенно разные, потому что (например) у пациента будет много физических экзаменов, а у медика - нет.

Должны ли это быть уроки?Каков стандартный подход привязки такого класса к определенному MembershipUser?

У меня проблемы с пониманием.

Ответы [ 2 ]

0 голосов
/ 06 сентября 2011

Вы можете получить что-то подобное на уровне домена:

public class Credentials {
    private String _userName;
    private String _email;
    private String _passwordQuestion;
}

public abstract class User {
    private Credentials _credentials;
}

public class Patient : User {
    private List<Medic> _medics;
    private List<PhysicalExam> _exams;
}

public class Medic : User {
    private List<Patient> _patients;
}

Обратите внимание, что код домена не ссылается непосредственно на членство в ASP.NET.Ваша инфраструктура может отвечать за сопоставление объекта User домена с ASP.NET MembershipUser:

public class AspNetMembershipProvider {
    public MembershipUser BasedOn(User user) {
        return new MembershipUser(user.UserName, user.Email, ...)
    }    
}
0 голосов
/ 06 сентября 2011

Из вашего объяснения у меня будет просто абстрактный базовый класс, который может называться Пользователь, который определяет повторяющиеся свойства и методы, которые разделяют и Пациент, и Медик.

Я бы тогда выставил открытое свойство в этом базовом классе, который является объектом MembershipUser.

Затем просто сделайте классы Patient и Medic наследуемыми от базового класса User и реализуйте их уникальные функциональные возможности.

Базовый класс пользователя также может реализовывать открытое свойство, представляющее собой список T, в котором есть предложение where, ограничивающее T объектами User

Примерно так:

public abstract class User<T> where T : User<T>
{
    public MembershipUser Membership { get; set; }
    public List<T> Users { get; set; }

}

public class Patient : User<Medic>
{

}

public class Medic : User<Patient>
{

}
...