엔터프라이즈 개체 프레임워크
Enterprise Objects FrameworkEnterprise Objects Framework, 또는 더 일반적으로 EOF는 NeXTSTEP 및 OpenStep 개발 플랫폼을 위한 선구적인 객체 관계 매핑 제품으로 NeXT에 의해 1994년에 도입되었다.EOF는 Java 또는 Object-C 객체에 데이터베이스 행을 매핑하여 관계형 데이터베이스와 상호작용하는 프로세스를 추상화한다.이는 개발자들이 낮은 수준의 SQL 코드를 쓰는 것을 크게 덜어준다.
EOF는 NeXT의 객체 지향 플랫폼의 신속한 애플리케이션 개발 이점에 매력을 느낀 금융기관들 사이에서 1990년대 중반에 약간의 틈새성공을 누렸다.1996년 애플사가 NeXT와 합병한 이후 EOF는 WebObjects의 완전한 통합 부분으로 진화했다. WebObjects 역시 원래 NeXT 출신 애플리케이션 서버였다.EOF의 많은 핵심 개념들이 핵심 데이터의 일부로 재조명되었는데, 이는 비 SQL 저장소를 기반으로 할 수 있도록 기본 데이터 형식을 더욱 추상화한다.
역사
1990년대 초 NeXT Computer는 데이터베이스 연결이 대부분의 기업에 필수적이며 또한 잠재적으로 복잡하다는 것을 인식했다.모든 데이터 소스는 서로 다른 데이터 액세스 언어(또는 API)를 가지고 있어 각 벤더의 제품을 배우고 사용하는 데 드는 비용을 증가시킨다.NeXT 엔지니어는 객체가 관계형 데이터베이스에 "대화"하도록 함으로써 객체 지향 프로그래밍의 장점을 적용하고자 했다.두 기술이 매우 다르기 때문에, 각 데이터 소스에 특정한 낮은 수준의 절차 코드(SQL)를 개발자들이 쓰지 못하도록 단열하여 추상화 레이어를 만드는 것이 해법이었다.
첫 번째 시도는 1992년 DBKit(Database Kit)의 출시로 이루어졌는데, DBKit는 모든 데이터베이스를 중심으로 객체 지향적인 프레임워크를 포장했다.아쉽게도 당시 넥스트스텝은 위력이 부족했고 DBKit에는 심각한 설계 결함이 있었다.
NeXT의 두 번째 시도는 1994년에 EOF(Enterprise Objects Framework) 버전 1로 이루어졌는데, 이는 훨씬 더 모듈화되고 OpenStep 호환성이 높은 완전한 재작성이었다.EOF 1.0은 NeXT가 Foundation Kit를 이용해 처음 출시한 제품으로 개발자 커뮤니티에 자동소거된 물체를 선보였다.당시 개발팀은 잭 그린필드, 리치 윌리엄슨, 리너스 업슨, 댄 윌하이트 등 4명에 불과했다.1995년 말에 발표된 EOF 2.0은 편집 컨텍스트를 도입하면서 아키텍처를 더욱 정교하게 다듬었다.당시 개발팀은 댄 윌하이트, 크레이그 페데리히, 에릭 노야우, 찰리 클라이스너로 구성됐다.
EOF는 1990년대 중반 금융 프로그래밍계에서 미미한 수준의 인기를 얻었지만 월드 와이드 웹의 출현과 웹 어플리케이션의 개념으로 저절로 생겨날 것이다.EOF는 기업이 데이터를 다시 쓰지 않고도 기존 데이터베이스를 웹에 연결하도록 도울 수 있다는 것이 분명했다.NeXT는 상태 관리, 로드 밸런싱 및 동적 HTML 생성을 위한 프레임워크의 추가로 EOF를 핵심으로 하는 최초의 객체 지향 웹 애플리케이션 서버인 WebObjects를 1996년에 시작할 수 있었다.
2000년에 (NeXT와 합병한) 애플사는 EOF를 독립형 제품으로 공식 폐기했는데, 이는 곧 출시될 Mac OS X의 데스크탑 애플리케이션을 만드는 데 개발자들이 그것을 사용할 수 없다는 것을 의미한다.그러나 그것은 계속해서 WebObjects의 주요 새로운 릴리스의 필수적인 부분이 될 것이다.2001년에 발표된 WebObjects 5는 그것의 프레임워크가 그들의 기본 목표-C 프로그래밍 언어에서 자바 언어로 포팅되었다는 사실에 의미심장했다.이러한 변화에 대한 비판론자들은 EOF의 힘의 대부분이 Objective-C 뿌리의 부작용이었고, EOF는 한때 가졌던 아름다움이나 단순함을 잃었다고 주장한다.EOGenerator와 같은 제3자 도구는 Java가 도입한 결함을 채우는 데 도움이 된다(주로 범주의 손실로 인해).
Objective-C 코드 베이스는 2005년 4월에 Mac OS X Tiger의 출시와 함께 Apple의 코코아 API의 일부인 Core Data로 데스크탑 애플리케이션 개발자들에게 일부 수정과 함께 재도입되었다.
EOF 작동 방식
Enterprise Objects는 객체 관계 매핑을 위한 도구와 프레임워크를 제공한다.이 기술은 JDBC와 JNDI 디렉토리를 통해 관계형 데이터베이스와 같은 다양한 데이터 소스에서 데이터를 검색하는 메커니즘과 해당 데이터 소스에 데이터를 다시 커밋하는 메커니즘을 제공하는 데 전문적이다.이러한 메커니즘은 개발자가 특정 데이터 소스 또는 데이터 소스 벤더보다 높은 수준에서 데이터 검색 및 약속을 생각할 수 있도록 계층화되고 추상적인 접근 방식으로 설계된다.
이 매핑의 중심에는 시각적 도구(UModeler 또는 Xcode에 대한 UModeler 플러그인)로 작성하는 모델 파일("EOModel")이 있다.매핑은 다음과 같이 작동한다.
- 데이터베이스 테이블은 클래스에 매핑된다.
- 데이터베이스 열은 클래스 속성에 매핑된다.
- 데이터베이스 행은 개체(또는 클래스 인스턴스)에 매핑된다.
기존 데이터 소스를 기반으로 데이터 모델을 구축하거나 처음부터 데이터 모델을 구축할 수 있으며, 이 모델을 사용하여 데이터 소스에 데이터 구조(테이블, 열, 결합)를 생성할 수 있다.그 결과 데이터베이스 레코드를 Java 개체로 전환할 수 있다.
데이터 모델을 사용하는 장점은 애플리케이션이 액세스하는 데이터 소스의 특성과 격리된다는 것이다.애플리케이션의 비즈니스 로직과 데이터베이스 로직의 이러한 분리는 개발자들이 애플리케이션을 변경할 필요 없이 애플리케이션이 액세스하는 데이터베이스를 변경할 수 있게 한다.
EOF는 다른 도구에서는 볼 수 없는 수준의 데이터베이스 투명성을 제공하며, 동일한 모델을 사용하여 다른 벤더 데이터베이스에 액세스할 수 있으며, 소스 코드를 변경하지 않고도 서로 다른 벤더 데이터베이스 간의 관계도 허용한다.
그 힘은 기본 데이터 소스를 영구 객체의 관리형 그래프로 노출하는 데서 나온다.간단히 말해서, 이것은 애플리케이션의 모델 계층을 일련의 정의된 메모리 내 데이터 개체로 구성한다는 것을 의미한다.그런 다음 이러한 객체에 대한 변경사항을 추적하고 사용자가 실행 취소 명령을 수행하는 경우와 같이 필요에 따라 변경사항을 되돌릴 수 있다.그런 다음, 애플리케이션의 데이터에 대한 변경 사항을 저장할 때가 되면, 기본 데이터 소스에 개체를 보관한다.
상속 사용
Enterprise Objects를 설계할 때 개발자는 상속이라고 알려진 객체 지향적 기능을 활용할 수 있다.예를 들어 고객 개체와 직원 개체 모두 이름, 주소 및 전화 번호와 같은 좀 더 일반적인 사용자 개체로부터 특정 특성을 상속받을 수 있다.이러한 종류의 사고는 객체 지향 설계에 내재되어 있지만, 관계형 데이터베이스는 상속에 대한 명시적인 지원이 없다.그러나 Enterprise Objects를 사용하면 객체 계층 구조를 반영하는 데이터 모델을 구축할 수 있다.즉, 데이터베이스 테이블의 여러 테이블이나 특정 뷰에 매핑되는 엔터프라이즈 객체를 설계하여 상속을 지원하는 데이터베이스 테이블을 설계할 수 있다.
EO(Enessive Object)란?
엔터프라이즈 오브젝트는 객체 지향 프로그래밍에서 흔히 비즈니스 오브젝트로서 알려진 것, 즉 비즈니스 도메인에서 물리적 또는 개념적 오브젝트를 모델링하는 클래스(예: 고객, 주문, 항목 등)와 유사하다.EO를 다른 개체와 다르게 만드는 것은 EO의 인스턴스 데이터가 데이터 저장소에 매핑된다는 것이다.일반적으로 엔터프라이즈 오브젝트는 관계형 데이터베이스의 행을 나타내는 키 값 쌍을 포함한다.키는 기본적으로 열 이름이고 값은 데이터베이스의 해당 행에 있었던 것이다.따라서 EO의 속성은 특정 실행 애플리케이션의 수명을 넘어 지속된다고 말할 수 있다.
더 정확히 말하면, Enterprise Object는 com을 구현하는 클래스의 인스턴스다.webobjects.eocontrol.EOEnterpriseObject 인터페이스.
엔터프라이즈 오브젝트에는 클래스의 오브젝트 모델과 데이터베이스 스키마 사이의 매핑을 정의하는 해당 모델(UModel이라고 함)이 있다.그러나 엔터프라이즈 개체는 자신의 모델에 대해 명확하게 알지 못한다.이 수준의 추상화는 데이터베이스 벤더가 개발자 코드에 영향을 미치지 않고 전환될 수 있다는 것을 의미한다.이는 엔터프라이즈 객체에 높은 수준의 재사용성을 제공한다.
EOF 및 핵심 데이터
공통의 기원에도 불구하고, 두 기술은 분화되었는데, 각각의 기술은 몇 가지 새로운 특징을 추가하면서 원래의 목표-C 코드 베이스의 특징의 일부를 유지하였다.
EOF에서만 지원되는 기능
EOF는 사용자 정의 SQL, 공유 편집 컨텍스트, 중첩 편집 컨텍스트, 관계 사전 추출 및 배치 결함을 지원하며, Core Data에서 지원하지 않는 원래 목표-C 구현의 모든 기능을 지원한다.또한 코어 데이터는 UModelGroup과 동등한 기능을 제공하지 않는다. NSManagedObjectModel 클래스는 기존 모델에서 모델을 병합하고 번들에서 병합된 모델을 검색하는 방법을 제공한다.
핵심 데이터에서만 지원되는 기능
코어 데이터는 가져온 속성, 관리되는 개체 모델 내의 다중 구성, 로컬 저장소 및 저장소 집계(특정 엔터티에 대한 데이터가 여러 저장소에 분산될 수 있음), 속성 이름과 유효성 확인 경고의 사용자 정의 및 현지화, 속성 유효성 확인을 위한 술어 사용 등을 지원한다.원래 목표-C 구현의 이러한 특징은 자바 구현에서 지원되지 않는다.