ORM에는 엔티티를로드하는 세션 (또는 이름이 무엇이든간에)이 있습니다. 세션은 실제로 DI 프레임 워크에 의해 주입 될 수 있습니다. 당신은 같은 것을 할 수 Hibernate
와 예에 따라서
:
class Service {
Session session; // could be injected by DI
...
Person p = (Person) session.load(typeof(Person), 50);
}
는 ORM의 엔티티 매핑은 IOC의 구성과 무관합니다.
ORM의 엔티티는 가장 간단한 방법으로 데이터를 보유합니다. 일반적으로 엔티티에 대한 인터페이스가 필요하지 않습니다.
public class Person
{
Integer id;
String name;
// getter and setter for the values
}
매핑은 다양한 방법으로 수행 될 수 있습니다. 아이디어는 클래스의 속성을 데이터베이스의 열에 매핑하는 것입니다. 다음은 hibernate
을 사용한 구성 발췌 부분입니다.
<class name="Person"
table="PERSON" >
<id name="id" column="PERSON_ID">
<generator class="native"/>
</id>
<property name="name" column="NAME" />
...
</class>
이것은 일반적인 아이디어였습니다 (실수가 있으면 죄송합니다). 세부 사항은 당연히 ORM뿐 아니라 사용하는 IoC/DI에 따라 달라집니다.
편집 여기
내가 내 댓글에 의미하는 것입니다 : 당신 실체를로드하는 IOC의를 사용하지 않는
abstract class Person {
abstract Presenter GetPresenter();
...
}
class Person1 : Person {
Presenter GetPresenter() { return new PresenterForPerson1() }
...
}
// other subclasses
, 당신은 세션/저장소를 사용합니다.
Person person = session.Load(typeof(Person), 50);
ORM은 다형성 엔티티를 지원합니다. 그래서로드 된 person
객체가 person
의 presenter
을 얻으려면 등 구체적인 유형 Person1, Person2
을 가질 수 있습니다, 당신은 일반 OO있어
Presenter presenter = person.GetPresenter();
를 사용합니다.
테스트의 경우 PersonX
을 PersonXTest
으로 서브 클래 싱하고 GetPresenter
을 무시하여 모의 발표자를 반환 할 수 있습니다. 그런 다음 테스트 용으로 PersonX
대신 ORM 구성을 사용자 PersonXTest
으로 변경합니다. DI는 필요 없습니다.
어떻게하면됩니까? – Marcus