Slim3과 PHP를 사용하여 응용 프로그램 아키텍처에 대한 제한된 지식을 사용하여 프로젝트를 시작했습니다. 계획은 프로젝트를 만들고 응용 프로그램에 대한 우려를 분리하는 것이 었습니다. 모든 것이 잘 진행되었지만 응용 프로그램이 늘어남에 따라 상황이 혼란스러워졌습니다.리포지토리, 서비스 및 작업/컨트롤러 란 무엇입니까?
이 작업을 수행하는 모든 아이디어는 개발을 쉽게하기위한 것입니다. 그것은 어떤면에서는 효과가 있지만 데이터 흐름을 파악하는 것이 때때로 복잡하다는 것을 알게되었습니다.
리포지토리, 서비스 및 컨트롤러/작업에 대한 조언이 필요합니다. 그리고 그들이 시스템에서 어떻게 작동해야하는지. 그 중 나의 현재 이해는 다음과 같습니다 :
저장소는 서비스 계층 및 모델 층 사이에 사용되는
저장소. 예를 들어 UserRepository
에서 데이터베이스에서 읽고 쓸 코드가 포함 된 메서드를 만들 수 있습니다. PHP에서는 PDO가 repo 메소드 내에서 ORM으로 사용됩니다. 예 :
class UserRepository
{
public function findByID($id) { ... }
public function findByEmail($email) { ... }
public function findByMobile($mobile) { ... }
public function createEmail($email, $firstname, $lastname, $password) { ... }
public function createMobile($mobile, $firstname, $lastname, $password) { ... }
}
여기에 몇 가지 예제 메소드를 넣었습니다. 그러나 더 많은 가능성이있을 것입니다.
서비스
서비스 계층은 애플리케이션 로직을 캡슐화합니다. 예를 들어 UserService
은 계정을 만들고 사용자를 등록하기 위해 필요한 로직을 수행해야합니다. 서비스는 써드 파티 일 수도 있습니다 (예 : Facebook SDK 또는 ORM 서비스 작성).
예 서비스 :
class UserService
{
public function createMobile($mobile, $firstname, $lastname, $password) {
/*
* Call a validation service to validate input
*/
...
/*
* Use UserRepository's findByMobile() to check if account exists
*/
...
/*
* Use UserRepository's createMobile() to create account
*/
...
/*
* Call SMS service to send verification code
*/
...
}
public function createEmail(...) { ... }
public function getFollowers (...) { ... }
}
작업
이 실제 용어입니다 있는지 확실하지 않습니다. 슬림 프레임 워크 문서에서 사용되었으며 씬 컨트롤러를 대표하는 것으로 보입니다.
조치에는 논리가 거의없고 서비스 호출을 위해 사용됩니다. 정당한 사유가없는 한 액션은 거의 리포지토리에 직접 전화하지 않습니다. 액션은 응답을 클라이언트에 다시 보내기 위해 서비스에서 반환 된 데이터에 대한 기본 검사를 수행합니다.
그들은 개별 노선에 묶여 있습니다. 나는 그들을 이렇게 사용하고있다 :
class ActivateEmailAction extends Action {
public function __invoke(Request $request, Response $response, $args = [])
{
if(!$this->ci->ActivationService->activateEmail($args['token'])){
return $response->withJson([
'status' => 'error',
'data' => null,
'message' => 'Invalid verification token'
]);
};
return $response->withJson([
'status' => 'success',
'data' => null,
'message' => null
]);
}
}
나는이 패턴을 바르게 사용하고 있는가? 내가 채택한 것처럼 보이는 흐름은 다음과 같습니다.
- 모든 것이 경로에서 시작됩니다. 예를 들어,
/create
을 요청합니다. 경로가 액션에 등록됩니다. - 액션은 액션 응답을 반환
- 작업에 다시 데이터를
- 서비스 손을 필요한 경우 다른 서비스와 저장소에 전화를 걸거나,
- 서비스 로직을 수행 호출하는 어떤 서비스를 결정
모든 조언을 많이 주시면 감사하겠습니다.
닫기가 너무 광범위하게 선정되었습니다. 나는 동의하지 않는다. 이러한 디자인 패턴을 사용하여 응용 프로그램을 설계 할 때는 일반적으로 하나의 정답만 있습니다. 예를 들어, 저장소를 사용하여 서비스를 사용하지 않을 것이고 그것은 나쁜 습관입니다. 나는 지식의 잠재적 격차로 인해 나쁜 습관으로 간주되는 일을 매우 잘 수행 할 수 있습니다. – BugHunterUK
당신이하는 모든 것이 좋습니다 - 당신이 찾고 있던 대답 이었습니까?) –
@ GeorgyIvanov 내 지식이 제한되어 있고 추측 작업이나 상식에 기반한 프로젝트가 많아서 프로젝트를 관리하는 동안 여전히 복잡함에 직면하고 있기 때문에 내가 어딘가에서 잘못하고 있다고 생각했습니다. – BugHunterUK