며칠 전에 나는 내 대학 과정과 학생 관리 시스템 (핵심 프로그램, GUI는 없음)의 (아마추어) 모델을 만드는 과제를 얻었다. 나는 한 부분을 제외한 거의 모든 것을 만드는 데 성공했다. 나는 이것을 어디에서 시작할지 전혀 모른다. 수업 강좌에는 다양한 방법이 있지만 각각의 방법이 다르게 작동해야합니다. 예를 들어 학생이 등록 마감일이 지났던 코스에 등록하고 싶다면 교수가 수동으로 추가하면 등록 할 수 있습니다. 학생이 너무 늦게 등록하려고 시도하면 날짜를 확인하고 오류를 반환하는 메서드를 설정합니다. 그러나 객원 교수가 그 방법을 부르면, 그는 '규칙을 무시'할 수 있습니다. 교수님은 인터페이스 사용에 대해 생각해 보라고 말씀 하셨지만 잠시 벽에 머리를 두드 리면서 인터페이스를 사용하여 권한을 설정하는 방법을 모릅니다.
EDIT : 나의 사과, 나는 질문을 잊었다. 무슨 권한을 생성하고 제어하는 자바에서 가장 좋은 방법입니다. 인터페이스가 될 경우 인터페이스를 사용하여이를 정확히 수행 할 수 있습니까?자바, 객체 다루기 권한
답변
. 메소드를 호출하는 사용자를 나타내는 User 객체를 전달한다고 가정합니다 (다른 방법이 있지만 사용하거나 필요하지 않을 수도있는 많은 아키텍처에 대해 이야기하지 않고도이를 설명합니다). 주의 할
public class Course {
public void enroll(User user, Student student) {
if(user.hasPermission(Permission.OVERRIDE_COURSE_RULES)) {
add(student);
} else if(hasEnrollmentDatePassed()) {
throw new CourseException("Enrollment date has passed.");
} else if(isClassFull()) {
throw new CourseException("Course is full");
} else {
add(student);
}
}
}
몇 가지 : 사용자 등 교수, 학생, 사용자에 의존하지 않는 콘크리트 클래스 나 교수, 학생 등이 구현하는 인터페이스 될 수 있습니다. 그렇게하면 사용 권한 매핑을 변경할 수 없으므로 권한 시스템을 교수와 학생에게 묶고 싶지 않습니다. 즉 나중에 TA 또는 Grad Student가 학생 추가 규칙을 무시하도록 허용하려는 경우 코드를 수정하지 않고는 해당 권한 매핑을 변경할 수 없습니다. 그래서 항상 '동사'또는 사용 권한을 사용하십시오. 사용 권한 집합을 사용자에게 매핑 한 다음 확인하지 않음 사용자 형식은 해당 동사를 사용하여 기능을 사용하도록 설정합니다.
당신은 인터페이스에게 당신이 할 수있는 많은 방법이 있습니다
public void professorEnroll(Student s);
인 액세스 할 수있는 프로세서의 방법
public void studentEnroll(Student s);
다른 인터페이스가 있다면. 가장 간단한 해결책이 무엇인지 생각해 보는 것이 좋습니다.
당신이 좋아하는 디자인을 할 수 :
class Course
{
public void enroll(Person actionGenerator, Student student)
{
if (actionGenerator instanceof Professor)
{
//bypass verification
}
else
{
}
}
}
interface Person
{
/*....*/
}
class Student implements Person
{
public void registerStudent(Course c)
{
c.enroll(this,this);
}
}
class Professor implements Person
{
public void registerStudent(Course c, Student s)
{
c.enroll(this,s);
}
}
사람들은 시스템 내부의 수업/배우를 시스템 외부의 사람들/배우와 혼동하는 경우가 많습니다. "우리는 학생의 현금 잔액을 유지할 학생 클래스를 신뢰할 수 없습니다. 그것을 믿는 (인간) 학생은 거짓말을 할 수 있습니다! " 주의 사항 : Student 클래스에 넣은 코드와 그 코드가하는 일을 제어합니다. 실제 학생은 해당 학생을 대표하는 사례를 프로그램하지 않습니다. 교수 수업에도 동일합니다.
일반적으로 말하면 설계 한 프로세스를 기반으로 보안 및 권한을 부여합니다. IE : 수업의 방법을 정의하고 사용하는 방법.
시스템은 학생이 수업에 직접 등록하고 있는지 또는 수업의 교수가 등록했는지 알아야합니다. 이것은 일반적으로 현재 시스템에 로그인 한 사람이 학생인지 교수인지를 시스템이 알아야한다는 것을 의미합니다. 다른 방법을 부르는 다른 스크린을 교수에게 제공하는 것이 이치에 맞을 수도 있습니다.
프로덕션 코드에서 스레드 로컬 저장소를 사용하여 현재 사용자의 사용 권한을 추적 할 수 있습니다. 그러나 그것은 아마도 학생 과제를위한 것입니다.
솔직히 Java 인터페이스를 도입하는 것이 도움이되는지 알 수 없습니다. 당신이 사용하는 인터페이스 (방법)에 대해 신중히 생각하면 아마도 도움이 될 것입니다.
- 1. Ruby - 객체 해시 다루기
- 2. 객체 그래프 다루기 - 웹 API
- 3. ViewModel 내의 WPF 객체 다루기
- 4. OpenGL VBO에서 죽은 객체 다루기
- 5. 자바 리플렉션 권한 오류
- 6. 자바 스크립트 - DOM 권한
- 7. 라이브러리의 자바 사용 권한
- 8. 스레드 다루기
- 9. 특정 콘텐츠에만 적용되는 자바 스크립트 이벤트 다루기
- 10. 외부 자바 스크립트 라디오 버튼 다루기
- 11. 자바 논리적 인 문제 번호 다루기
- 12. 자바 스크립트를 사용하여 크로스 브라우저 기능 다루기
- 13. 자바 객체
- 14. 객체 자바
- 15. 자바 - 객체
- 16. DBNull.Value 다루기
- 17. 자바 : 객체 목록에 객체 추가
- 18. 자바 스크립트 파일 사용 권한
- 19. 자바 RMI - 소켓 권한 문제
- 20. PHP 자바 스크립트 권한 문제
- 21. 안드로이드 자바 권한 거부 manifest.xml
- 22. 자바 애플릿 파일 권한 오류
- 23. 동적 객체 할당 및 액세스 권한
- 24. 이미지보기에서 다루기
- 25. 지도 다루기
- 26. DataTemplates 다루기
- 27. 태그 다루기
- 28. 청취자 다루기
- 29. 휴대용 JAR의 경로 다루기
- 30. 응용 프로그램 컨텍스트 다루기