Midnight Peach가 만들어 낸 코드
Midnight Peach 2008. 10. 8. 23:54
[주의] 이 글은 MP의 현재 버전 (3.X)에 맞지 않습니다. 단순 참고용으로만 활용하십시오 |
이전 포스트인 Midnight Peach의 빠른 시작에 이어 MP가 생성해 낸 코드에 대해서 좀 더 자세히 살펴보겠습니다.
빠른 시작의 서두에서 잠시 말씀드렸지만 MP는 범용 코드 생성 툴입니다.
사용된 패키지에 따라 다양한 코드가 생성되기 때문에, 여기서는 MP의 기본 내장 패키지인 Default 패키지가 Memopad DBML에 대해 생성해 낸 코드를 살펴보도록 하겠습니다.
전체적인 구조는 다음과 같습니다.
(Memo로 시작하는 클래스들은 각 엔터티마다 하나씩 존재하지만, 편의상 Memo 엔터티만 표시하였습니다.)
Entity<T>
Entity<T> 클래스는 모든 엔터티의 추상 제네릭 클래스 입니다.
Tag 라는 object형 속성을 가지고 있어서, 필요에 따라서 어떤 정보든 엔터티에 저장할 수 있는 기능을 제공합니다.
또한 추상 메서드로 Clone을 정의하고 있으므로 모든 엔터티 클래스는 이 메서드를 구현하게 됩니다.
Memo
MP가 아니라 LINQ to SQL이 생성해 낸 엔터티 클래스입니다.
MP는 이 엔터티 클래스에 대한 부분 클래스를 만들고, 이를 Entity<T> 로부터 상속 받는 코드를 추가합니다.
또한 Clone 추상 메서드에 대한 구현도 덧붙입니다.
MemberColumnName과 MemberColumn
엔터티의 속성 이름을 각각 문자열 상수와 열거형으로 가지고 있는 일종의 도우미(helper) 클래스와 열거형입니다.
EntityManager<T>
모든 DTO(Data Transfer Object) 객체의 추상 제네릭 부모 클래스입니다.
Default 패키지의 거의 모든 로직이 이 곳에 있습니다.
MemoManager
EntityManager<T>를 상속 받은 실제 DTO 객체입니다.
EntityManager 부모 클래스가 제공하지 않는 커스텀 로직은 이 곳에 위치하게 됩니다.
(나중에 다시 설명드리겠지만, 이 파일이 아닌 partial class로 지정된 다른 파일에 코드를 작성합니다. 기본적으로 자동 생성된 파일은 전혀 건드리지 않는 것이 원칙입니다.)
ManagerRepository
모든 DTO 객체(Manager)들의 저장소입니다.
DTO 객체는 new 연산자를 통해 직접 생성될 수도 있지만, ManagerRepository.Memo 와 같은 식으로 싱글톤으로 접근할 수도 있습니다.
또한 DataContext 객체를 생성하는 CreateDataContext 메서드도 가지고 있습니다.
다음 튜토리얼에서는 이 코드들에 대한 사용 예를 단위 테스트와 함께 살펴보겠습니다.