기존 프로젝트에 일반 저장소 계층을 추가하도록 지정하는 숙제가 있습니다. 내가 직면하는 문제는 다음과 같다. 내 저장소는 데이터를 저장하는지도를 캡슐화해야합니다. 내가 지금까지 가지고있는 것은 다음과 같습니다 :지도를 사용하는 일반 저장소
public interface IDObject<T> {
public Comparable<T> getID();
}
public class Person implements IDObject<String> {
private String cnp;
private String name;
private String age;
public Person(String cnp, String name, String age) {
this.cnp = cnp;
this.name = name;
this.age = age;
}
public void setName(String name) { this.name = name; }
public void setCNP(String cnp) { this.cnp = cnp; }
public void setAge(String age) { this.age = age; }
public String getName() { return name; }
public String getCNP() { return cnp; }
public String getAge() {return age; }
public String toString() { return cnp + "-" + name + "-" + age; }
@Override
public Comparable<String> getID() { return getCNP(); } //basically the unique identifier
}
public class Repository<T extends IDObject<?????????>>{
private IMap map;
public Repository() {
map = new Map<???????, T>();
}
...
}
그래서 내 문제는 저장소 클래스에 나타납니다. 나는 사람을 저장하여 무언가를 할 것입니다. Repository<Person> repo = new Repository<Person>();
하지만 문제는 저장소 생성자에서지도를 작성하는 방법을 모른다는 것입니다. 즉, 키의 유형을 알지 못합니다. 사람의 cnp
을 키 (Type은 String
)로 지정하고 싶지만 키를 String으로 정의하도록 맵을 강제로 설정하면 키가있는 일부 Animal 객체를 추가하려는 경우 저장소가 더 이상 일반화되지 않습니다. 정수로, 맵은 map = new Map<Integer, T>();
과 같아야합니다.
따라서 질문은 어떻게 저장소가 IDObject
을 구현하고 데이터를 저장하는지도를 캡슐화한다는 사실을 알고 있다는 사실을 이용하여 Repository<Person> repo = new Repository<Person>();
과 같은 구조를 사용할 수 있습니까? 저장소 클래스를 완성 할 수 있도록 키를 어떻게 알 수 있습니까?
"일반 리포지토리 계층"은 실제로 무엇을 의미합니까? 그 사용법을 어떻게 상상합니까? 기탁 된 모든 객체가 고유 식별자 클래스를 공유합니까? 그렇다면 단순해야합니다. 그렇지 않다면 나는 그 일이 의미가 있다고 생각하지 않는다. – Deltharis
@Deltharis 글쎄, 저장소에는'store (T obj)','getAll()'등의 메소드가 있어야합니다. 예를 들어,'store (T obj)'메쏘드는'map.add (K key, T obj)'를 실제로 생성 할 것이고 또한 새로 저장된 객체를 extern 파일에 저장할 것입니다. 또한 저장소를 만들 때 파일에 저장된 모든 개체가지도에로드됩니다. 그것이 사용법의 일부분을 상상하는 방법입니다. 네, 모든 기탁 된 객체는 고유 식별자 클래스를 공유합니다. – cuvidk