это мой первый вопрос здесь. Я надеюсь, что кто-то может помочь.
Это связано с хорошей практикой объектно-ориентированного проектирования.
Я пишу приложение для Android, но этот вопрос носит общий характер и в равной степени относится (например, к пользовательскому интерфейсу Swing).
Ради аргумента скажем, у меня есть ученик класса.
public class Student {
public int StudentID;
public String firstName;
public String lastName;
}
Существует принцип, согласно которому вы должны редко запрашивать информацию о себе у объекта, скорее вы должны сообщать ему, что вы хотите, чтобы он делал, и позволять объекту выполнять работу самостоятельно.
Для этого у меня есть следующие методы
public class Student {
public int StudentID;
public String firstName;
public String lastName;
// Constructors
public Student () {}
public Student (int StudentID){
populateFromDataBase (StudentID);
}
private void populateFromDataBase (int StudentID){
// Get the data from the database and set the
// values of all the properties of this
}
public void save (){
// Save the values of the properties to db
}
}
Это сделано для того, чтобы другие классы могли использовать этот класс, не заботясь о том, как он сохраняет свою информацию.
Отказ от ответственности: я знаю, что я не использую аксессоры, просто публичные свойства. Я просто пытаюсь сделать этот пример простым.
Не спрашивайте, как внешний класс узнает StudentID. Это не имеет отношения к вопросу, который я хочу задать, а именно:
(Скажи) Я хочу нарисовать таблицу студентов и их детали на экране. Из класса пользовательского интерфейса (скажем, ListActivity в Android) я мог бы получить массив студентов, а затем просмотреть их, настраивая свойства моего ListView по мере продвижения. Проблема, с которой я столкнулся, заключается в том, что я, кажется, думаю слишком процедурно, а не в истинном духе объектно-ориентированного дизайна. Это также требует, чтобы каждый ученик спрашивал о себе, нарушая инкапсуляцию.
Видимо (из того, что я прочитал) студент должен рисовать сам.
Вот где я запутался. Как студент может нарисовать себя, когда он ничего не знает о пользовательском интерфейсе? Я передаю ссылку на пользовательский интерфейс на объект студента? Это нарушает разделение презентационного и бизнес-уровней или нет? Что считается хорошей практикой? Есть ли какие-нибудь статьи или шаблоны дизайна, желательно с примером кода, потому что я не смог их найти? Я беспокоюсь о чем-то не столь важном, и я должен просто пойти с моей первой грязной идеей?
Я действительно был бы признателен за любой ввод, поскольку очевидно, что эта проблема повторяется со всем, что я кодирую.
Другой возможностью, которую я рассмотрел, был доступ к базе данных непосредственно из пользовательского интерфейса и привязка к курсору, но это кажется неправильным. или это?