목차
回复内容:
백엔드 개발 PHP 튜토리얼 Yii2框架中,有必要再分离service层么?

Yii2框架中,有必要再分离service层么?

Jun 06, 2016 pm 08:26 PM
php yii2

目前的项目中,service层,就是使用静态方法调用,方法内再实例化ar model

而Yii2自动生成的模板中,是直接在model中使用ar model。

两者没有多大的区别,那分离出service层的意义是什么?

回复内容:

目前的项目中,service层,就是使用静态方法调用,方法内再实例化ar model

而Yii2自动生成的模板中,是直接在model中使用ar model。

两者没有多大的区别,那分离出service层的意义是什么?

在简单的系统里面,分层是这样的

controller model storage(sql、nosql、cache)

所有的业务逻辑都在model上

现在讨论一个常见的场景,用户下订单要买点东西,这个业务逻辑涉及到的model类有User(用户)、Order(订单)、Goods(商品)

那么下订单这个事情是放到User还是Order上?无论放在User还是Order上,这个业务逻辑都需要多个model类的参与

这种需求在系统里面越来越多,你就会发现你总有那么几个model在不断的膨胀,这些model之间甚至产生了网状的相互依赖关系

需求越复杂,你越容易陷入这种混乱的局面

service层的作用就是把这些需要多个model参与的复杂业务逻辑单独封装出来,这些model之间不再发生直接的依赖,而是在service层内协同完成逻辑

service层的第一个目的其实就是对model层进行解耦

业界对前面提到的那种不断膨胀的model称为“充血模型”,起初对充血模型进行反思的一种解决方案就是“贫血模型”,model里面尽量少放点逻辑,把这些逻辑都移动到controller层面去处理,在controller里面调用多个model完成业务逻辑,也达到了对model间解耦的作用

但问题就是,业务逻辑都放到controller层面了,如果其它的controller也需要相同的业务逻辑时,只能在controller里面调用其它的controller,这样做既不方便又麻烦

所以后来还是把这种解耦单独放一层,叫service,现在分层就变成这样

controller service model storage

service层的第二个作用就是重用

差不多就是这样

简单粗暴的总结来说,如果你的某个业务逻辑,需要用到多个model,就放到service层里面去,如果只是这个model自己的事,跟其它的model没有任何关系,就放到model里面就好。

如果你的系统本来就很小,业务逻辑也超级简单,也不存在长期演进迭代的需求,随你怎么高兴怎么写都行。

取决于model层是否够乱

该不该分离出新的层,有无service层都有各自的好处,没有优劣

乱了才拆,不乱不管,就看合适不合适

如果真的很乱,非拆分不可,想必题主也不会再提问,所以推测现在是刚开始乱

如果真是这样,其实这就是开始了,推荐现在就拆

分层永远是处理复杂业务的有效手段(一般项目三层,复杂的项目回到四层、五层)。

在面向OO的系统里,service就是biz manager,在面向过程的系统里service就是TS脚本。

AR Model里面当然可以放业务代码,但仅限于操作这个model自身(如果使用了repository则也不能操作同类型别的model,而应该在repository中操作某一类models),不对其他类型model产生依赖。

业务manager(也就是所谓的service)则根据业务,处理不同类型model或者repository之间的关系。

业务更加复杂时可以抽出子系统的facade门面,处理不同业务manager调用顺序。

最后在controller里调用它们(对, controller也可以认为是一个facade)。

我接触过的项目都在这几层里面,再复杂也就到facade。小项目当然直接扔到model里,,随着业务不断复杂,我们要做的只是不断重构而已。

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.

핫 AI 도구

Undresser.AI Undress

Undresser.AI Undress

사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover

AI Clothes Remover

사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool

Undress AI Tool

무료로 이미지를 벗다

Clothoff.io

Clothoff.io

AI 옷 제거제

AI Hentai Generator

AI Hentai Generator

AI Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25 : Myrise에서 모든 것을 잠금 해제하는 방법
4 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Ubuntu 및 Debian용 PHP 8.4 설치 및 업그레이드 가이드 Dec 24, 2024 pm 04:42 PM

PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

CakePHP 날짜 및 시간 CakePHP 날짜 및 시간 Sep 10, 2024 pm 05:27 PM

cakephp4에서 날짜와 시간을 다루기 위해 사용 가능한 FrozenTime 클래스를 활용하겠습니다.

CakePHP 토론 CakePHP 토론 Sep 10, 2024 pm 05:28 PM

CakePHP는 PHP용 오픈 소스 프레임워크입니다. 이는 애플리케이션을 훨씬 쉽게 개발, 배포 및 유지 관리할 수 있도록 하기 위한 것입니다. CakePHP는 강력하고 이해하기 쉬운 MVC와 유사한 아키텍처를 기반으로 합니다. 모델, 뷰 및 컨트롤러 gu

CakePHP 파일 업로드 CakePHP 파일 업로드 Sep 10, 2024 pm 05:27 PM

파일 업로드 작업을 위해 양식 도우미를 사용할 것입니다. 다음은 파일 업로드의 예입니다.

CakePHP 유효성 검사기 만들기 CakePHP 유효성 검사기 만들기 Sep 10, 2024 pm 05:26 PM

컨트롤러에 다음 두 줄을 추가하면 유효성 검사기를 만들 수 있습니다.

PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 PHP 개발을 위해 Visual Studio Code(VS Code)를 설정하는 방법 Dec 20, 2024 am 11:31 AM

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

CakePHP 빠른 가이드 CakePHP 빠른 가이드 Sep 10, 2024 pm 05:27 PM

CakePHP는 오픈 소스 MVC 프레임워크입니다. 이를 통해 애플리케이션 개발, 배포 및 유지 관리가 훨씬 쉬워집니다. CakePHP에는 가장 일반적인 작업의 과부하를 줄이기 위한 여러 라이브러리가 있습니다.

PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? PHP에서 HTML/XML을 어떻게 구문 분석하고 처리합니까? Feb 07, 2025 am 11:57 AM

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

See all articles