Design patterns 物体应该自己画吗?怎么用?(我使用的是android,但这个问题适用于所有OO语言)

Design patterns 物体应该自己画吗?怎么用?(我使用的是android,但这个问题适用于所有OO语言),design-patterns,user-interface,Design Patterns,User Interface,这是我的第一个问题。我希望有人能帮忙。 这与良好的面向对象设计实践有关。 我正在编写一个android应用程序,但这个问题是一般性的,同样适用于(例如)swing用户界面。 为了便于辩论,假设我有一个班上的学生 public class Student { public int StudentID; public String firstName; public String lastName; } 有一个原则,你不应该问一个对象关于它自身的信息,而应该告诉它你想要它做

这是我的第一个问题。我希望有人能帮忙。
这与良好的面向对象设计实践有关。
我正在编写一个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
    }

}
这样,其他类就可以使用该类,而不必关心它如何保持其信息。
免责声明:我知道我没有使用访问者,只是使用公共属性。我只是想让这个例子保持简单。
不要问外部班级是如何认识学生ID的,这与我想问的问题无关,即:

(说)我想在屏幕上画一张学生表和他们的详细信息。从UI类(比如android中的ListActivity)中,我可以获得一个学生数组,然后在其中循环,一边设置ListView的属性。我的问题是,我的思考似乎过于程序化,而不是真正的面向对象设计精神。它还需要询问每个学生对象关于自身的情况,这违反了封装。
显然(从我读到的)学生应该自己画。
这就是我感到困惑的地方。当一个学生对UI一无所知时,他怎么能画自己呢?我是否将对UI的引用传递给student对象?这是否打破了表示层和业务层的分离?什么是良好做法?有没有文章或设计模式,最好是示例代码,因为我找不到?我是否在担心一些不那么重要的事情,我是否应该继续我的第一个混乱的想法?
我真的非常感谢您的任何意见,因为很明显,这是一个问题,我编写的任何代码都会再次出现


我考虑的另一种可能性是直接从UI访问数据库并绑定到游标,但这似乎是错误的。或者是吗?

观点可能会有所不同,但我认为,对象不应该绘制自己,或者就此而言,将自己保存到数据库中

对于绘图,我通常会实现某种形式的双重分派,例如

<>从UI中分离,你也应该考虑,或者./p> 对象的持久性可能更加复杂,可能涉及各种模式,如Martin Fowler所述,并在Fowler的网站上进行了总结


当然,用户界面不应该绕过模型直接进入数据库。

这是一个值得一读的好东西。这些概念(我相信)涉及当底层数据(模型)发生变化时视图自动更新自身。所以基本上把它分为
StudentView
StudentModel
谢谢。你让我想了很多。是时候上网了。