关于对api+domain+model三层的个人见解

首先感谢@dogstar提供的框架,感谢各位大神在使用中提出问题和解答问题,让我更深入的理解这个框架

QQ图片20151027015212.png


图片是昨天晚上跟@dogstar提问后,看完@喵了个咪*的api+domain+model三层讲解之后的一些认识。在实际开发中,有一些自己的理解,不论对错,先拿出来,错了,请大家指正:
  @dogstar   我看了喵写的那个api+domain+model的介绍了。不知道理解是否正确。拿注册来说吧:首先,api做的是判断是验证用户,然后调用domain验证的方法,model就是对数据的操作,验证用户是否存在,合法等。如果说让我从非技术的角度考虑的话,我是希望,比如说开门,api只是说我想进门,domain是进门的方法,model是进门的数据,可以这样理解吗  
   这个是我昨天晚上看完@喵了个咪*的博客之后的一些认识,我以前接触比较多的MVC框架,我个人认为在phalapi 中,也可以延续使用MVC框架的一种细想,改天有时间补图,现在只是口头描述。我们假设把客户端看成V层,那么客户在V层的操作就会触发Api的响应,这个时候api层就会开始作一个判断,但是它又没有具体的实施方法,那么这个时候就需要调用Domain层中具体的判断方法,那么就相当于Api+Domain层形成了一个MVC中的C层,Model层是对数据库进行一个操作。其实在基础案例上面,Demo中,Domain中调用Model,Api中调用Domain。App中的操作第一触发对象是Api。所以,我个人认为,phalapi是在MVC的基础上面进行了详细的划分,让代码在每一个层次中体现出不同的价值,减少了代码的重复性,比如:以前用thinkphp框架开发后台的时候,登录,注册,验证等是一个接口,个人中心是一个接口,现在我已经放在同一个接口里面,getBaseInfo,现实的是我的个人中心中需要体现的内容,当然,具体体现什么是要跟前台沟通的,但是我可以偷懒,让几个内容在一个接口里面实现(如果user表中有这些字段,为什么不用同一个接口呢?),说到这里,可能会有人说,部分代码是无用的,我是这样理解的,如果说每次登陆的时候都要判断用户是否存在的情况下,为什么不在同一部代码里面让具体内容得到显示,判断也是需要耗费服务器资源的。
   断片了,只能写到这里了。在实际开发工程中如果再出现什么问题或者有什么个人的一些微不足道的想法,不论对错,我会与各位分享。
                                                          2015/10/27夜
 
已邀请:

vrworking - 软件狗

赞同来自: lubot

感谢dc的框架!在此也小议一下ADM模式,请各位指正:
1、首先AD之间的关系,较为模糊,应用起来,如果去对应C层,反而觉得繁琐,为了ADM而去ADM。
2、关于“想进门”和“进门的方法”,确实没有技术上的区别,而是技术和非技术的区别。
3、D层的命名,我想不出来处,why ?
 
个人认为:
1、我会在A层负责入参和出参的业务处理(注意是用户端业务),例如登录时的密码,POST过来的是明文,我会处理为加密后的密文准备查询;我会在D层处理获取数据、操作数据前后的业务处理(查询条件的变化、组装、查询后的数据处理),比如处理用户登录的where条件组装,比如查询后的用户信息中的gender字段转换1为“男”2为“女”其他为“保密”,再比如进行缓存层的初始化和分布式处理;我会在M层只做单纯的持久层操作(完全信任D层的数据过滤、隔离等)。这样约定比较清晰,也便于团队成员理解。
2、Domain层的命名,好晦涩,如果是我会命名为Business,甚至也叫Controller或Process。命名上面采用大家都熟悉的单词可能更易于交流。
3、Api层则是一个缩写,如果是我会命名为Interface,接口,约等于入口。
4、如果我来命名这个框架的模式就叫“IBM”,哈哈~~
5、class的命名方式采用了下划线,去掉下划线是否会更优雅一些呢?例如 ApiUser   DomainUser   ModeUser,或者反过来:UserApi   UserDomain   UserModel
 
PhalApi是个非常好的框架,小而美,使用起来也很简单,希望作者能够坚持下去!

dogstar - PhalApi创始人

赞同来自: 幸福量子3.0

【冒泡】雅典娜
比如你要造一个大厦 然后你是发包方 A 就是你要做什么 然后至于找谁做 承包商(D)是谁,可以是 D1 也可以是D2 , OK ,那么 承包商一般不会自己去动手开发,他只会拿回扣, 那么理所当然具体动手开干的事情就交给了包工头M, 你可以请包工头M1 也可以请包工头M2 总之 D 只管管控并监督完成项目  A 只管拿到结果住进大厦

=============
来自雅典娜在群里的回复

lubot - PHP开发工程师

赞同来自:

比如说开门,api只是说我想进门,domain是进门的方法,model是进门的数据。这个比喻是正确且恰当的。赞。

dogstar - PhalApi创始人

赞同来自:

简而言这,api负责调度,domain负责业务,model负责技术,这叫关注点分离。

qqlcbb

赞同来自:

如果model负责数据库操作,譬如增删改查,那没一句简单的查(select)也需要去model创建一个方法,那样子代码会不会太冗余

要回复问题请先登录注册