2012-10-01 3 views
3

철학적 질문 OOP와 데이터베이스, 특히 클래스가 데이터베이스로 백업되는 프로그램의 경우이 접근 방법은 무엇입니까? 예를 들어 팀 클 래스에는 여러 플레이어가있을 수 있습니다. 이 프로그램은 시작시 데이터베이스에서 모든 팀 데이터를로드하고 메모리에서 모든 조작을 수행 한 다음 데이터베이스를 닫은 상태로 작성합니다. 또는 변경 사항이 발생할 때마다 각 데이터 조작을 데이터베이스에 작성하는 것이 더 낫습니다. 이것이 더 좋은 방법이라면 왜 데이터를 메모리에로드해야합니까?클래스와 데이터베이스를 사용한 프로그래밍

다른 문제는 데이터베이스가 표준 OOP을 한 가지 중요한 방법으로 깨뜨린 것 같습니다. OOP를 사용하는 플레이어 컬렉션이있는 팀 클래스에서 플레이어 클래스는 팀 이름을 보유 할 속성을 가질 필요가 없습니다. 플레이어는 자신이 속한 팀 클래스에서 팀 이름을 가져옵니다. 이제 플레이어를 데이터베이스에 저장하려면 각 플레이어 레코드에 팀 이름 (또는 팀 ID)에 대한 열이 있어야합니다.

즉, GetAllPlayers() 메서드가 필요한 경우 팀 클래스의 멤버 메서드로 만들거나 컬렉션의 모든 플레이어를 메모리에서 반환하거나 플레이어 클래스에서 정적 메서드를 만들겠습니까? 데이터베이스에서 모든 플레이어를 얻으려면?

누구나이 질문에 답변하는 방법에 대한 정보를 얻을 수 있습니까?

프로그래밍 수업을 듣고 나서 꽤 오래되었습니다. 누구나 여기서 가장 좋은 방법을 이해할 수있는 훌륭한 교과서를 알고 있습니까?

+0

Hibernate/NHibernate를 살펴보십시오.그들은 이런 종류의 문제를 정확하게 풀려고합니다. 그것은 완벽하지 않습니다. 그것은 단순한 것이 아닙니다. 여기에서 관계형 데이터베이스를 기반으로 OO 코드를 작성하는 것이 얼마나 복잡한 지 알 수 있습니다. –

답변

2

데이터베이스는 객체 지향을 훨씬 더 근본적인 방식으로 중단합니다. (또는 객체가 관계형 모델을 깰 수 있습니다. 중간 계층의 OO 사람인지 DBA인지에 따라 다릅니다.)

관계형 데이터베이스는 기본적으로 선언적으로 설정됩니다. 객체 지향 언어는 객체 인스턴스 기반입니다. "객체 - 관계형 임피던스 불일치"때문에 두 작업을 함께 수행하는 것은 어렵습니다. 이것이 바로 많은 ORM 솔루션 (TopLink, Hibernate 등)을 보는 이유입니다. 모두 객체 지향 프로그래머를 속여 객체를 다루고 관계형 데이터베이스에 대해 걱정할 필요가 없다고 생각하게 만듭니다.

그러나 구현하면 지속성이 모델 객체와 분리되어야한다고 생각합니다. 필자는 보통 관계형 코드를 인터페이스 기반 데이터 액세스 레이어에 넣습니다. 그런 식으로 모델 객체는 영속성 여부를 알 필요가 없으며 CRUD 연산을 단일 패키지로 분리합니다.

권장되는 읽기 정보는 파울러의 Patterns of Enterprise Application Architecture을 제공 할 예정입니다.

+0

"객체 - 관계형 임피던스 불일치"라는 말을 듣지 못했습니다. 나는 웹상에서 그것에 대해 좋은 것을 보았는데 도움이 될 것이다. 나는 끈기의 모든 것을 꺼내는 것에 대한 당신의 생각을 좋아합니다. 나는 항상 수업 시간에 그 코드를 가지고있는 것을 싫어했습니다. +1하지만 다른 의견이 들어 왔는지 알기 위해 조금 대답하지 않은 채로 남겨 둘 것입니다. – MrGibbage

+0

좋습니다. 사냥과 함께 행운을 빈다. – duffymo

+0

불일치! = 불가능 성 –

0

이 시나리오에 가장 적합한 솔루션은 실제로 많은 변수에 달려 있습니다. 일반적으로 "계층화 된"접근 방식은 OO 언어에서 가장 좋은 방법으로 간주되지만 응용 프로그램이 해결해야 할 각 관심사의 우선 순위에 따라 거의 무한정의 순열이 있습니다.

대표적인 개체 (플레이어, 팀 등)는 일반적으로 데이터 액세스 계층에 속하기 때문에 일반적으로 데이터베이스 작업에 참여하지 않아야합니다.

객체 지향 마인드 학습에 접근하는 좋은 방법은 몇 가지 디자인 패턴을 살펴 보는 것입니다. 내가 추천하는 주제에 대한 "읽기 쉬운"책은 "Head First Design Patterns"입니다. 그것은 Java로 이루어져 있으며 다루는 각 주제에 대해 다양한 각도를 제공합니다. 필자는 "Dummies"서적의 수준과보다 추상적이거나 이론적 인 서적의 수준 사이에 좋은 다리 역할을한다고 생각합니다.

관련 문제