ARCA 一个好的设计分层

一个好的设计分层
Presenter
Repository
Form
Service
Package

#1 Presenter
把日期、金額、名稱之類的呈現(presentation)邏輯抽離出來!

#2 Repository
把查詢(query)的邏輯,也就是取得entity的各種方式抽離出來!

#3 Form
把參數驗證(validation)的邏輯(例如字串長度、日期、金額大小)抽離出來!

#4 Service
把施加在多種entity上
或是
複雜的商業行為
抽離出來!

#5 Package
把其他公司也能使用、概念上獨立於當前專案的程式碼抽離出來!


方法一:照Domain分
/views
/controllers
/MyApp
    /Article
        /Article.php
        /Presenter.php
        /Repository.php
        /Form.php
    /User
        /User.php
        /Presenter.php
        /Repository.php
        /Form.php
    /Order
    // ...
    /Service
        /FirstService.php
        /SecondService.php
/GithubName
    /CoolPackageOne
    /CoolPackageTwo
    /CoolPackageThree
	
方法二:照功能分
/views
/controllers
/MyApp
    /Entities
        /Article.php
        /User.php
    /Presenters
        /Article.php
        /User.php
    /Repositories
        /Article.php
        /User.php
    /Forms
        /Article.php
        /User.php
    // ...
    /Service
        /FirstService.php
        /SecondService.php
/GithubName
    /CoolPackageOne
    /CoolPackageTwo
    /CoolPackageThree
	
	方法三? 其他

取用的邏輯可以封裝成repository。

我會建User資料夾,裡面放UserEntity.php和

UserRepository.php。

我不把這種查詢的行為視為business logic(這一包不是service的概念)。

http://blog.turn.tw/?p=2290  参考文献
My个人常用分层总结录
按功能分:

services 一般做商业接口 比如支付宝等 微信api接口 其他第三方接口 比如短信等 与controller 和 数据库model层  或者 dao层 通信

DAO 顾名思义 于数据库层交互

Model  框架可能自带的那种 就是做表的映射 然后模型的自动生成一些属性 快速开发

entity  独立层  如果加后缀 比如Request  就是独立的请求层 (这里可以做校验参数)类似于下文的 Form 但比Form更全 这里也可以是Repository层 
与Dao或model 交互  和 controller 控制 交互

Package  (lib)  共用层(优化向)

Controller  C层 控制器入口

View 层 现代web前端分离 交由前端


常用模块:
APi 模块 api接口模块  (区分层的概念)
api模块里简单分类 可以是 请求别人的接口 和 配置本身服务对外接口
和services 交互 与 Dao 或 Logic交互


WWW  默认模块  (区分层的概念)


Laravel的

/resources
    /views
    /lang
    /assets
/app
    /Commands	
    /Console	
    /Events	
    /Exceptions	
    /Handlers	
    /Http	
    /Providers	
    /Services	
    /Https
        /Controllers
        /Middleware	
        /Requests

记录你我
请先登录后发表评论
  • latest comments
  • 总共0条评论