서비스가 데이터 매퍼 (아래의 의사 코드)에 데이터 검색을 위임하는 기본 아키텍처를 설정했습니다.서비스가 데이터 검색을 데이터 매핑 프로그램에 위임하면 모델을 반환해야합니까?
ProductService->fetchById(123);
class ProductService
{
public function fetchById(id)
{
product = ProductMapper->fetch('id', id);
// or product = new Product(ProductMapper->fetch('id', id)) ?
return product;
}
}
class ProductMapper
{
public function fetch(bySomething, value)
{
// fetch stuff from DB.
// return new Product or just raw data?
}
}
내가 ProductCollection 또는 Product라고 가정 해 보겠습니다. 여기서 가장 좋은 방법은 무엇입니까?
- 데이터 매퍼가이 모델의 인스턴스를 만들고이를 서비스로 반환하면 서비스로 전달됩니까?
- 데이터 맵퍼가 원시 데이터를 서비스에 제공하면 호출자에게 전달하기 전에 해당 데이터로 모델을 인스턴스화합니까?
서비스를 추상화하고 싶습니다. 데이터 액세스 계층은 ElasticSearch 또는 SQL 데이터베이스 또는 다른 소스에서 데이터를 검색 할 수 있습니다. 이 서비스를 추상화로 사용하면 코드에서 너무 높은 리팩토링을하지 않고도 나중에 데이터 소스를 쉽게 전환 할 수 있습니다. – 1sloc
그건 내가 서비스라고 생각하는 것보다는 저장소 패턴처럼 들린다. 저에게 저장소는 데이터 액세스 코드를 캡슐화하는 반면 서비스는 실제로 비즈니스 로직/동작을 연관시킵니다. htt38://lostechies.com/jimmybogard/2009/09/03/ddd-repository-implementation-patterns/ – tomliversidge
글쎄, 서비스에는 약간의 논리가 있어야합니다. 예를 들어, 'order = OrderService-> fetch (123); OrderService-> applyDiscount (order); OrderService-> persist (order)'입니다. 이 저장소 동작을 고려해 보시겠습니까? – 1sloc