저는 현재 저장소 패턴을 사용하고있는 프로젝트에서 작업하고 있습니다. 현재 내 데이터베이스의 각 테이블에 대해 저장소를 구축 중입니다. db가 커짐에 따라 약간 지루 해지고 있습니다. 각 테이블에 대해 수행해야하는지 궁금합니다. 사용자는 드롭 다운에서 방금 사용 된 테이블을 포함하여 모든 테이블을 편집 할 수있는 기능을 요청했습니다. 예를 들어 WorkLocation 테이블에 대한 링크가있는 SubContractor 테이블이 있습니다. SubContractors에는 TypeOfWork 테이블에 대한 링크가 있으며이 섹션만으로도 3 개의 저장소가 구축됩니다. 처음에 SubContractor를 작성하는 것을 생각했지만, 사용자는이 중 하나를 편집하고 싶었 기 때문에 각 저장소를 작성했습니다. 이게 일반적인가요?리포지토리 패턴이 1 : 1이어야하나요?
답변
사실 리포지토리는 도메인 개체가 다른 데이터 표현 (예 : 관계형 데이터베이스)으로 변환되는 방법을 캡슐화하는 패턴이기 때문에 테이블 당 리포지토리를 만들지 말고 다시 도메인 개체로 변환합니다 .
우선, 1 개의 테이블은 1 개의 도메인 객체 일 수도 있고 아닐 수도 있습니다. Entity Framework 나 NHibernate와 같은 OR/M 프레임 워크는 단순히 테이블에 객체를 매핑하는 것 이상입니다.
도메인 개체는 동일한 도메인의 다른 도메인 개체와 연결되어있을 수 있으며 이는 저장소 뒤에있는 관계형 디자인에 따라 도메인 개체가 하나 이상의 테이블에 유지 될 수 있음을 의미합니다.
루트 엔터티에 대해서만 리포지토리를 구현하는 일반적인 사례가 있습니다. 예를 들어, 도메인 객체가 많고 Employee
입니다. 당신은 당신의 마음에 드는 OR/M의 상단에 ICompanyRepository
코드를 구현을 설계해야하고, Employee
창조 Company.Employees
1-N 협회에 추가 직원에 의해 수행 될 것이다 : 같은
ICompanyRepository repo = new CompanyRepositoryImplementation();
Company myCompany = repo.GetById(839984);
myCompany.Employees.Add(new Employee { FullName = "Matias Fidemraizer" });
좋은 전체 또는/M Entity Framework 또는 NHibernate는 연결을 유지하고 Employees
연관에 직원을 추가하는 간단한 작업은 전체 직원을 생성하기 위해 INSERT
을 발행 할 것이며 LINQ (또는 다른 객체 쿼리 접근법)를 사용하여 해당 직원을 쿼리하고 얻을 수 있습니다. .
마지막으로, 당신은 일반적인 저장소를 구현하려고 할 위치, Add
및 Remove
(GetById
, GetByCriteria
(식 트리/LINQ를 사용하여 사용자 정의 기준) 없음Update
, 이것은 또한 OR/M 거래에서 처리하십시오 때를 객체 또는 컬렉션 수정) 은과 같거나 특정 도메인 요구 사항을 제공하기 위해 파생 될 수 있습니다.
일반 저장소 서명은 다음 샘플과 같습니다
public interface IGenericRepository<TDomainObject>
where TDomainObject : DomainObject
- 1. 리포지토리 패턴이 과도한 것입니까
- 2. 리포지토리 패턴이 활성 레코드 패턴과 동일합니까?
- 3. 리포지토리 패턴이 Asp.net 공급자 모델과 동일합니까?
- 4. 리포지토리 패턴이 Asp.net 웹 폼과 잘 작동 할 수 있습니까?
- 5. 웹 API 및 서비스 레이어 및 EF6 - 리포지토리 패턴이 없음
- 6. 2 데이터베이스 사이에 1 저장소 리포지토리
- 7. 패턴이
- 8. 다른 리포지토리 내의 Laravel 리포지토리
- 9. 자바 패턴이
- 10. Sed의 패턴이
- 11. 왜이 코드는 다음 0과 1 패턴이 작동하지 않는 것을 인쇄합니까?
- 12. 리포지토리 간의 메서드 호출 - 리포지토리 패턴
- 13. Laravel 4 리포지토리 및 자체 리포지토리 작업
- 14. XCode의 프로젝트 주최자에 리포지토리 추가 - 리포지토리
- 15. 리포지토리 레지스트리와 활성 리포지토리 탭간에 전환하는 방법
- 16. 다른 패턴이 있으면 제거 할 패턴이 있습니까?
- 17. 리포지토리 생성
- 18. 리포지토리 유형
- 19. 집계를위한 리포지토리!
- 20. 리포지토리 - PHP
- 21. 리포지토리 재배치
- 22. DDD 리포지토리
- 23. 리포지토리 구현
- 24. 메이븐 리포지토리
- 25. Eclipse 리포지토리
- 26. 리포지토리 패턴
- 27. git 리포지토리
- 28. Yii ActiveRecord 대 리포지토리 패턴
- 29. React.js 패턴이
- 30. 디자인 패턴이
는 기본 CRUD 작업에 대한 일반적인 기준의 repo의 일종이 없으십니까? – Groo
제네릭은 당신의 친구입니다! 'Repository'을 생성 할 수 있습니다. 여기서'T '는 엔티티 유형 (즉, 테이블 항목을 나타내는 객체)입니다. –
은 제네릭을 조사합니다! – Paritosh