对象应该自己绘制吗?怎么样?(我使用android然而问题适用于所有OO语言)

Dan*_*Dan 5 user-interface design-patterns

这是我在这里的第一个问题.我希望有人能帮帮忙.
它与良好的面向对象设计实践有关.
我正在编写一个Android应用程序,但问题是一般的问题,并且同样适用于(例如)swing用户界面.
为了争论,我说我有一个班级学生.

public class Student {
    public int StudentID;
    public String firstName;
    public String lastName;
}
Run Code Online (Sandbox Code Playgroud)

有一个原则,你应该很少向对象询问有关自身的信息,而应该告诉它你想要它做什么,并让对象自己完成工作.为此,我有以下方法

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
    }

}
Run Code Online (Sandbox Code Playgroud)

这样其他类可以使用这个类而不关心它如何持续它的信息.
免责声明:我知道我不使用访问者,只使用公共财产.我只是想让这个例子变得简单.
不要问外部班级如何知道学生ID,这与我想问的问题无关,这就是:(

说)我想在屏幕上绘制学生及其详细信息的表格.从UI类(在Android中说一个ListActivity)我可以得到一个学生数组,然后循环遍历它们,设置我的ListView属性.我遇到的问题是,我似乎在程序上思考太多,而不是面向对象设计的真正精神.它还需要询问每个学生对象本身,违反封装.
显然(从我读到的)学生应该画画.
这是我感到困惑的地方.当学生对UI一无所知时,他怎么能够自我画画呢?我是否将UI的引用传递给学生对象?这是否会破坏表示层和业务层的分离?什么是好习惯?是否有任何文章或设计模式,最好是示例代码,因为我找不到任何?我担心一些不那么重要的事情,我应该选择第一个凌乱的想法吗?
我真的很感激任何输入,因为很明显这是一个与我编码的任何东西重复出现的问题.

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

Don*_*oby 3

意见可能有所不同,但恕我直言,对象不应该绘制自己,或者就此而言,将自己保存到数据库中。

对于绘图,我通常会实现某种形式的双重调度,例如访问者模式

为了与 UI 分离,您还应该考虑Model-View-ControllerModel-View-PresenterModel-View-ViewModel

对象的持久性可能相当复杂,并且可能涉及各种模式,如 Martin Fowler 的《企业应用程序架构模式》中所述,并在 Fowler 的网站目录中进行了总结。

当然,UI 不应该绕过模型直接访问数据库。