2010-03-29 4 views
2

현재 asp.net MVC 2 응용 프로그램 아이디어에 대해 Db4o를 테스트하고 있지만 최선의 방법으로 진행할 수있는 몇 가지 사항이 있습니다.Db4o MVC 응용 프로그램 아키텍처

내 응용 프로그램이 내 엔티티를 참조하기 위해 ID 대신에 추측 할 수있는 경로를 사용하기를 원하지만, ID에 대한 업데이트 시나리오가 필요하다고 생각합니다.

그래서 예를 들어 나는

/국가/대신/국가 미국/1 그래도 난 (국가에 있지만, 다른 엔티티에하지 아마도) 그래서 키 이름을 변경할 수 있습니다

생각하고 싶어 개체의 필드를 업데이트하기 전에 개체를 검색하기 위해 참조로 사용할 ID가 필요합니다. UUID는 사용하기에는 오랜 시간이 걸리며 어쨌든 확실한 분리 문제를 해결하기 위해 내 자신의 ID를 사용하는 것이 좋습니다.

KandaAlpha 프로젝트를 보면 나는 디자인의 일부 측면에 너무 열중하지 않았으며 [domainsignature]와 EntityWithTypedId, IEntityDuplicateChecker, IHasAssignedId 등의 항목을 사용하는 S # BaseObject 및 IValidatable은 엔티티에 삽입/업데이트 동작을 제어하기 위해 더 깨끗하고 확장 성이 뛰어나고 유효성 검사를 포함하며 코어 및 기본 리포지토리 클래스 내에 잘 캡슐화됩니다.

그렇다면 Db4o에 대한 S # arp 아키텍처의 포트가 의미가 있습니까? 아니면 여전히 oodb 세계에서 rdbms를 생각하고 있습니까?

또한 Db4o에서 인덱스 (위의 고유 항목 포함)를 관리하는 것이 가장 좋습니다. 모델 메타 데이터를 기반으로하고 부트 스트 래퍼에서 DI를 사용하여로드해야합니까? 예를 들어 Automapper.CreateMap처럼로드해야합니까?

내가 알고있는 약간의 궁금한 질문이지만 생각, 아이디어 또는 제안 된 독서 자료는 크게 감사하겠습니다.

덕분에 맥

답변

5

이 문제는 서로 다른 측면을 많이 포함되어 있습니다. 시작하자.

일반적으로 db4o는 다른 객체를 구별하기 위해 object-identity을 사용합니다. 따라서 일반적으로 어떤 ID도 사용하지 않습니다. 그러나 웹 응용 프로그램에서는 요청간에 개체 ID가 느슨해 지므로 ID를 사용하는 방법은 없습니다.

해당 사항은 internal object ids of db4o can be used입니다. 그러나이 ID는 데이터베이스 조각 모음을 수행 할 때 변경 될 수 있습니다. 나는 당신이 링크 등을 가능하게하는 영구적 인 id를 원한다고 생각한다. 그래서이 id는 옵션이 아니다. Guid 또는 db4o-UUIDs은 ID로 사용할 수 있습니다. 그러나 둘 다 길다.

난 최선의 해결책은 개체의 ID를 나타내는 필드를 추가하는 것입니다 생각합니다. 그런 다음 index that fieldan unique constraint을 추가 할 수 있습니다. 이렇게하면 다른 종류의 ID도 사용할 수 있습니다. 예를 들어 ISO 코드를 id로 사용하기 때문에 '/ country/usa'를 사용할 수 있습니다. 간단한 숫자 자동 ID의 경우 use a clever id-generator 수 있습니다.

내가 언급 한 두 개의 프레임 워크 (KandaAlpha, S # arp)를 알지 못합니다. 그 물건은 여전히 ​​의미가있는 것으로 들립니다. 특정 동작을 추가하는 인터페이스 또는 특성을 구현합니다. 예를 들어 어떤 필드가 객체의 id인지를 시스템에 알려주는 속성. 이 속성은이 필드가 색인화되었는지, 시스템이 조회 방법을 알고 있는지 등을 확인합니다.

내 응용 프로그램에서는 색인 처리가 속성을 통해 추가됩니다. 사용할 수있는 db4o-IndexedAttribute가 있습니다. 또는 직접 추가 할 수도 있습니다. 일반적으로 메타 데이터로 명시 적으로 구성하거나 동일한 작업을 수행하는 두 가지 방법이 모두 좋다고 생각합니다.

+0

정보 주셔서 감사합니다. 실험을 계속할 것입니다. id 생성기는 꽤 멋져 보입니다. –