으로 ORMs는 종종지도 일대 등 관계 :저장소 패턴, ORMS 및 getter 및 setter
class Parent {
IList<Child> Children { get; set; }
}
문제는 저장소에, 당신이 할 수 있다는 것이다 :
GetChildrenOfParent(int parentID) {
from c in Children...
return children;
}
이제 자녀를 "데려다 줄"장소가 두 곳 있습니다. 당신은 어쩌면 단지 아이들이 누가 삭제 된 플래그가없는 반환과 같은 무언가를 추가 할 때, 당신은 할 수 있습니다
GetChildrenOfParent(int parentID) {
from c in Children..
where not deleted
return children;
}
또는
class Parent {
IList<Child> Children { get .... only get not deleted children; set; }
}
당신은 내가에서 얻고 무엇을 볼 수 있습니까? 이제 getter 루틴을 수행 할 두 곳을 선택할 수 있습니다. 이 루틴을 가지고 논리적 장소가 저장소에있는 것 같다, 아직는 것을 의미한다 :
foreach (var child in parent.Children)
은 더 이상 당신의 "게터"을 통해 ORM이 일대를 갖는 따라서 모든 생각을 않을 것입니다 이 방법으로 매핑 된 것은 잘못된 것 같습니다.
만약 당신이 list = parent.children.where를한다면 ... 당신은 당신의 예에서 사용했습니다. 당신이이 곳 곳곳에 수백 개의 전화를 가지고있을 때 어떤 일이 일어날 지 상상해보십시오. 그리고 이제 그것을 x.deleted && x.age <18. 게터 또는 저장소 메소드의 요점은 한 곳에서만 변경하고 계약을 파기하지 않는다는 것입니다. – BobTurbo
정확하게, 그래서 내가 깨끗하게 유지하고 자신의 저장소 방법에 넣어 선호했다. 내가 무엇을 요구하고 있는지 정말로 모르겠지만 원래의 조언으로 돌아가서, 당신과 당신의 응용에 맞는 것을 선택하십시오. 당신의 '베스트 프랙티스'에 대한 당신의 해석은 무엇을 의미합니까? 너는 '맞다'또는 '틀렸다'.개인적인 경험에 비추어 볼 때 '옳은'또는 '잘못 된'것으로 간주되는 것에 엄격히 부합하려고 노력하는 것은 주요한 진도를 늦추거나 과부하로 코드를 부 풀리는 결과를 낳습니다. – lloydphillips
필터링 된 쿼리를 두 곳 이상에서 사용해야하는 경우 코드 유지 관리에 도움이되는 특정 메서드를 만드는 것이 좋습니다. 수업에서 해당 결과에 대한 속성에 액세스했는지 여부는 도메인 모델링 방법에 대한 개인적인 선택에 달려 있습니다. – lloydphillips