设计Java类的最佳方法?
我希望我问的是正确的问题。这只是出于我的好奇心,因为我不是一个经验丰富的开发人员,我只是想听听你们的意见,什么是设计类的好方法。是否有任何标准方法或其中一种方法可以实施?我只是想知道创建类的传统方式是什么,或者你的方式是什么
备选案文1:
public class Student{
private String name;
private String address;
public Student(String name, String address){
this.name = name;
this.address = address;
}
public void addStudent(){
//add name and address to database.
}
}
备选案文2:
public class Student{
public void addStudent(String name, String address){
//add name and address to database.
}
public void addAllStudent(List Student){
//loop and add each student to database
}
}
方法调用:
//option 1:
Student s = new Student("abc","xyz");
s.addStudent();
//for list,
for(int i=0;i<list.length;i++){
Student s = new Student(list[i].name, list[i].address);
s.addStudent();
}
//option 2:
Student s = new Student();
s.addStudent("abc","xyz");
s.addAllStudent(list);
# 1 楼答案
正如你所看到的,在这个问题上有很多意见,所以我去补充另一个;)
有人评论说,在创建类的新实例时没有“银弹”可供使用。这几乎击中了靶心。有很多方法,直接通过构造函数、静态方法或封装在工厂中。甚至有非常好的参数通过
reflections
创建实例如何将学生保存到数据库中也是如此。有许多模式可能是有效的。只要确保您了解这种模式是如何工作的,以及它的优点和缺点是什么。同样重要的是,在代码中使用它
关于您的代码,如果您更改为建模透视图,则选项2没有意义。向学生添加学生?除非你不想造成一堆人为的学生,否则你最好将学生加入课程、班级、学校
# 2 楼答案
您可以尝试以下方法:
创建一个
Student
bean创建
DAO
类最后,您可以这样使用它:
# 3 楼答案
这里有一个很好的方法,在评论中有一些解释
就命名方法而言,类方法是根据其行为命名的。把它想象成告诉一个学生“去把自己保存到数据库中”。还有一种方法,比如“去数据库中更新自己”
当你处理一个列表时,列表本身不应该是学生课堂的一部分。把清单放在别的地方。但是,学生类可以有一个静态方法,它获取学生列表并一次性保存
例如,学生可能在学校的一个班级。然后
创建一些并保存它们:
更进一步说,学生课堂可能不应该处理大量拯救学生的问题。所以,让我们解除它的责任,让这批人来处理
# 4 楼答案
选项2并不好,因为这两种方法实际上与它们所属的学生对象无关。您可以将这两种方法设置为静态。选项1是
Student
类的“正确”方式,但方法addStudent()
是错误的。您可以在数据库中有一个方法并调用database.addStudent(objStudent)
。 您还可以将Student
类中的addStudent
方法更改为addToDatabase(Database db)
甚至在列表作为数据库的特定情况下,根本不需要自定义add方法,因为List allready具有add方法
在最简单的情况下,这一切归结为:
如果您认为第二行太复杂,可以在Student中创建静态方法:
然后你可以这样使用它:
出于个人喜好,我不会做后者。这个方法对列表的实际作用不够透明,这让我有点烦。在第一种情况下,简单地使用list的add方法没有什么错
# 5 楼答案
嗯。。。第一件事第一。。。a
Student
和aList<Student>
之间存在差异通常您会创建一个类
Student
在代码的其他地方,您可以使用java列表(不在学生类中)
被截取的代码可能在你的
SubscribeStudentToCourseService
左右您想做的是-单一责任:
创建一个只负责一件事的类:
List<Student>
字段,供访问该课程的学生使用)# 6 楼答案
似乎您正在使用同一个类为学生提供模板,并存储学生
你真的需要把学生存储在同一个班级吗?这将导致一些令人困惑的设计,其中有一个Student类存储实际代表一个Student的其他Student类
也许添加学生的功能可以在单独的班级中,例如在学校?或者你只要在需要的地方创建一个学生的通用列表。因此addStudent函数可能会从类中删除并存储在其他地方