Наследование доменного класса в Grails или флаг?

Я делаю веб-сайт, на котором врачи и пациенты могут войти в систему.

class Doctors {
    String firstName
    String lastName
    String email
    String password
    String hospitalName
    String NPINumber
}

И пациенты

class Patients{
    String firstName
    String lastName
    String email
    String password
}

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

Итак, два варианта:

ВАРИАНТ-1

class Users{
    String firstName
    String lastName
    String email
    String password
}

class Doctors extends Users {
    String hospitalName
    String NPINumber
}


class Patients extends Users{
}

ВАРИАНТ 2

class Users{
    String firstName
    String lastName
    String email
    String password
    boolean isDoctor
    String NPINumber
    String hospitalName
}

Я не уверен, какой из этих дизайнов мне выбрать, чтобы его можно было расширить в будущем!


person Sap    schedule 27.08.2012    source источник
comment
Лично я предпочитаю расширять класс User. Даже если вы добавите больше данных в будущем, этот подход сделает работу и будет централизованным, что более удобно для чтения, обслуживания и является хорошей практикой.   -  person axierjhtjz    schedule 27.08.2012


Ответы (1)


Вариант 1 больше ОО наверняка. Тем не менее, я бы все же внес небольшие изменения, чтобы сделать дизайн еще лучше. Вместо расширения User, почему бы не иметь свойство User, которое содержит некоторые общие атрибуты. Расширение класса User может усложнить ваш дизайн. Возможно, вам поможет эта тема.

Кроме того, в качестве предложения не используйте имена классов во множественном числе. Представьте, что это сущность сама по себе, а не набор сущностей. Очевидно, что ваш класс «Доктор», например, представляет конкретно одного врача. Не более одного. Поэтому вам следует использовать Доктор, Пациент и Пользователь. Надеюсь, поможет.

person Tiago Farias    schedule 27.08.2012