2014-02-16 2 views
0

Я создаю веб-систему для студентов, чтобы посмотреть их результаты, просмотреть их расписание и т. Д. Однако у меня возникла проблема с архитектурой этой системы, так как я могу " t найти подходящий способ связывания данных.Дизайн системы ученого

Ученик, который находится в классе (школе). У студента есть табло. У класса (школы) есть список «заданий», которые учащиеся имели для каждого предмета, но у него есть только такие сведения, как имя, максимальный балл, вес. Фактический балл находится на табло студента.

  • Многие учащиеся находятся в одном классе.
  • Только один экземпляр задания должен существовать в любое время, и он должен жить в объекте SchoolClass, потому что он затем применяется ко всему классу, а не к ученику.
  • Студент должен тогда держать только собственный счет и ссылаться на остальные данные назначения извне.

Как я могу ссылаться на конкретную домашнюю работу у ученика?

Это было путано. Это то, что я в настоящее время:

class Student extends Person { 
    private SchoolClass schoolClass; 
    private Scorecard scorecard; 
} 

class Subject { 
    private String name; /// "Compilers II", "Data Structures", etc. 
} 

class SchoolClass { 
    private Course course; // "Computer Science", "Administration", etc. 
    private List<Assignment> assignments; 

    class Assignment { 
     private Subject subject; 
     private int maxScore; 
     private int weight; 
     private String name; // "Test about material resistance II" 
    } 
} 

class Scorecard { 
    // How to reference each assignment from each subject in this student's class cleanly? 
} 

ли мой дизайн происходит в правильном направлении, или я должен просто стереть это и начать заново? Благодаря!

ответ

1

Это выглядит неплохо, но есть пара вещей, которые я хотел бы отметить.

  • Является ли Person классами абстрактными? Если это так хорошо сделано! Если нет, вероятно, это должно быть потому, что человек является общим термином. Для получения дополнительной информации о том, когда нужно сделать абстрактный класс, отправьте мой вопрос на вопрос this.
  • Молодцы, используя Assignment как вложенный класс! Он напрямую относится к SchoolClass, поэтому он должен быть вложенным, но как насчет класса Subject? Это похоже на то, что напрямую связано с SchoolClass, поэтому было бы неплохо сделать Subject вложенным классом.

Что касается ссылки на одно домашнее задание, это зависит от того, как вы хотите его получить. Если вы хотите получить его по индексу, используйте getter. Для этого можно просто поместить этот код в SchoolClass:

public Assignment getAssignment(int index) 
{ 
    return assignments.get(index); 
} 

Однако, если вы хотите использовать ссылку на него по имени вместо этого он немного сложнее, но все еще довольно смирительную вперед. Вы бы добавить поглотитель к вашему Assignment классу так:

public String getName() 
{ 
    return name; 
} 

Тогда вы просто должны написать еще один поглотитель для SchoolClass как это:

public Assignment getAssignmentByName(String name) 
{ 
    for (Assignment assignment : assignments) 
    { 
     if (assignment.getName().equals(name)) 
      return assignment; 
    } 

    System.out.println("No assignment found by the name of " + name); 
    return null; 
} 

Надежда, что помогает! Если у вас есть вопросы, не стесняйтесь спрашивать!

Edit:

Для того, чтобы ваши объекты назначения описать себя, они должны переопределить Object.toString(). Следующий код должен быть помещен в ваш класс присваивания.

// I noticed that you only have a maxScore variable, I think that a score variable is needed 
private int score; 

@Override 
public String toString() 
{ 
    return "The score for this assignment is: " + score; 
} 
+0

Да, 'Лицо 'является абстрактным. Но я спрашиваю больше о том, как, например, должна ли оценка каждого ученика ссылаться на оценку каждого задания для его класса? это больше, чем просто найти назначение по имени, оно должно содержать что-то, что говорит студенту что-то вроде «это оценка для назначения ***: x». должен ли он содержать хэшмапы, чьими ключами являются Assignment? Каково ваше предложение? –

+0

Как насчет класса 'ReportCard'? Это может иметь объекты ArrayList из SchoolClass (по одному для каждого объекта), который, в свою очередь, уже имеет список назначений. Я обновил ответ, включив в него переопределение метода toString(), чтобы объекты назначения могли описать себя. – BitNinja

+0

Я не думаю, что вы поняли, что я спросил, но вы мне все равно помогли. Я на самом деле имел в виду, как ссылаться на Assignments из класса Student. Фактический класс 'Assignment' не имеет никакой информации о фактической оценке учащегося, потому что существует один экземпляр« Assignment »для всего класса. Поэтому я в конечном итоге использую HashMap в классе 'Student'. –

Смежные вопросы