Наследование для класса домена в 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
}

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

1 ответ

Решение

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

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

Другие вопросы по тегам