这是关于将Object传递到其他库或项目的最佳实践的问题。
假设我们有一个叫做学生和成绩的课程。
import Grades;
public class Student (){
String StudentName;
String StudentID;
int age;
int gradeForMath;
int gradeForScience;
Grades otherGrades;
}
现在在我们的主课程中,我想将Grades课程和一些Integers传递到一个库中,以计算学生明年通过的可能性。
public static void main (){
MyExternalLibraryCalculatingPassRate passRate = new MyExternalLibraryCalculatingPassRate(Grades otherGrades, int math, int science);
}
但是,我的问题是图书馆对Grades没有可见性,也没有名为Grades的类。我的问题是,这样做的最佳方式是什么?我有以下两个想法,但我不确定是否有更好或更糟的方式 -
传递Grades的基础数据结构。例如,如果我们可以将等级归结为散列图或arraylist,或者什么然后通过它?
在库中创建一个Grades类并将其导入到项目中并使用项目库中的Grades类,而不在项目中声明Grades类?
我不相信这两种方法都很好 - 但最佳做法是什么?还是常见的?
答案 0 :(得分:1)
您的库和主项目似乎在同一个域上运行,所以我认为最好的想法就是共享通用数据模型。如果MyExternalLibraryCalculatingPassRate
计算Student
将通过的概率,则可能最好使方法使用Student
对象,而不是Grades
和两个基元。通常,混合对象和基元来表示相同的概念是一个坏主意。
- 更新
我发现此代码存在其他问题,Student类只有字段。因此,如果其他课程想要获得成绩,他们应该知道成绩的内部表示(一个Grades
字段和两个ints
),这通常是坏事。
答案 1 :(得分:1)
您可以在外部库中定义一个接口,该接口指定必须如何组织数据但不提供实现。 例如:
public class StudentPassRateData {
int getGradeForMath();
int getGradeForScience();
}
然后,在主项目中,您可以定义一个实现此接口的类:
public class Student implements StudentPassRateData {
private String StudentName;
private String StudentID;
private int age;
private int gradeForMath;
private int gradeForScience;
private Grades otherGrades;
int getGradeForMath() {return gradeForMath;}
int getGradeForScience() {return gradeForScience;}
}