데이터베이스 클래스에 포함 할 내용
On 2월 15, 2021 by admin 현재 SQL 서버와 통신 할 자바 애플리케이션을 개발 중입니다. 따라서 open()
및 close()
를 담당하는 Database
클래스를 만들었습니다.
데이터베이스에 데이터를 추가하고 싶습니다. 이 예에서 테이블은 job이라고합니다. 그래서 Job
클래스를 만들었습니다. 이 작업 외에도 데이터베이스에 저장되는 (많은) 다른 것들이 있습니다. 내 질문은 다음과 같습니다. addJob(Job j)
메소드를 어디에 두어야합니까? 지금까지 가능한 세 가지 해결책을 생각할 수 있습니다.
-
addJob(Job j)
메소드를Database
클래스는 나머지 프로그램에 대한 추상화를 제공합니다. 나머지 프로그램은 이것이 어떻게 구현되는지 걱정할 필요가 없습니다. 단점은Database
가 결국 매우 커진다는 것입니다. -
별도의 클래스를 만듭니다.
JobHandler
데이터베이스를 허용하는 생성자public JobHandler(Database d)
. 이JobHandler
에서는addJob(Job j)
를 제공 할 계획입니다. 내 문제는 현재open()
및 iv id =를 제외한 공개 메서드가 없기 때문에Database
와 상호 작용해야하는 수준입니다. “fb9e5de8e7″>
. 순수한 SQL 문을 받아들이는 메서드를 만들어야합니까? 이것은 나에게 좋지 않은 것 같습니다.
Database
클래스를 추상화하고 확장하여 여기에 누락 된 메서드를 구현합니다. . 단점은 데이터베이스를 전달하고 다른 종류의 여러 쿼리에 대해 동일한 연결을 사용할 수 없다는 것입니다.
이 문제를 해결하려면 어떻게해야합니까? 클래스가 너무 크지 않고 너무 많은 데이터베이스 클래스가 데이터를 처리하는 메서드를 구현하는 클래스에 노출되지 않도록 어떻게 구성해야합니까?
편집 작업은 데이터베이스에 저장되는 데이터의 예일 뿐인 무작위 클래스라는 점에 유의하세요.
댓글
- "이 문제를 해결하려면 어떻게해야합니까? "이 모든 작업을 수행하는 성숙한 라이브러리가 약 9001 개 있습니다. 그중 하나를 사용하세요.
- 그런 라이브러리에 대한 예를 들어 주 시겠어요. 조사해보고 싶습니다.
- Job이 데이터의 모범이라는 것은 무엇을 의미합니까?
- 문장을 다시 표현했습니다.
- 그런 다음 더 나은 예를 찾으십시오. 그렇지 않으면 사람들은 문제는 설명 편집을 읽는 것과 상관없이 데이터베이스 작업 (예약 된 작업)에 관한 것입니다. oad 및 / 또는 명확하지 않음.
답변
이 질문은 매우 혼란 스럽습니다. 더 혼란스러운 것은 데이터베이스 작업 (예약 된 작업)에 대한 질문이라고 생각하게 만드는 예제로 Job과 Jobhandler를 사용하기로 결정했다는 사실입니다. 하지만 편집 내용을 읽은 후에는 DAO 를 작성하려고하고 “고용 직책”과 같은 직업에 대해 이야기하고 계셨던 것 같습니다.
데이터베이스 클래스를 작성하지 마십시오. JDBC 연결을 생성하여 DAO에 전달하십시오.
일반 DAO를 작성하거나 각 엔티티에 대해 개별 DAO를 작성할 수 있습니다. DAO에는 SQL이 있습니다.
또 다른 패턴은 활성 레코드 패턴 입니다.
DAO는 데이터베이스에 액세스하여 SQL을 캡슐화하고 DAO는 데이터 목록을 반환하는 메서드를 가질 수도 있습니다.
Active Record는 일반적으로 데이터베이스 자체에서 데이터를 읽고 쓰기를 관리하는 비즈니스 개체를 구현하는 데 사용됩니다. 이것은 너무 많은 것으로 간주됩니다. 클래스는 자신의 지속성을 관리해서는 안됩니다. 액티브 레코드는 테이블의 단일 행을 나타냅니다.
액티브 레코드를 DAO 형식으로 리팩토링하는 것에 대한이 질문 은 데이터베이스에 액세스하고 삽입 또는 업데이트하는 객체의 완전한 예와 그에 대한 답변은 대신 DAO를 구현하는 방법을 설명합니다.
댓글
- ORM을 언급 할 수 있습니다. 프레임 워크도 있습니다.
- @COMEFROM OP는 초보자입니다. 그는 제트 스키를 운전하기 전에 수영을 배워야합니다. ORM은 매우 복잡합니다.
- 답변 해 주셔서 감사합니다. 저는 " 데이터베이스 연결을 생성합니다 "를 참조하고 있습니다. 이것은 모든 오류 처리 등을 사용하여 기본 클래스에서 연결을 만드는 것을 의미합니까? ' 이가 단일 책임 원칙과 충돌하지 않습니까?
- 메인 클래스는 ' SRP는 일반적으로 전제 조건을 준비하고 구성 파일을 읽습니다., GUI 앱의 경우 기본 창을 열거 나 최소한이를 수행하는 메서드를 호출합니다. 그 목적은 앱의 진입 점이되는 것입니다. 연결을 반환하는 함수를 만들어 main에서 호출하거나 연결 풀 등을 지원하는 웹 컨테이너를 사용하는 경우 연결 풀 관리자에 대한 연결을 요청할 수 있습니다.
답글 남기기