橡皮擦擦

MVC分层对比

技术杂谈

业务介绍

这是一个短信邮件平台模块,它在整个微服务系统中有两个职责。
一、负责为其他模块提供短信邮件发送的远程调用接口;
二、有一个后台页面,可以让管理员自定义发送短信,并且可以浏览全部的发送记录。

分层说明

  1. [Controller] Request与Response、控制调度
  2. [Validate] [可复用] 对每个业务场景提交的参数进行数据验证 (只负责Client传递的数据)
  3. [Service] 业务流程处理、Transaction Script
  4. [Model] [可复用] 数据持久化操作、模型相关功能
  5. [Config] 配置信息

(注:以上所分层级不应存在同层互相调用)

眼里只有MVC什么都不考虑系列

application
    [config]
        Common
        Mail
        Sms
        (more...)
    [model]
        Base
        Mail
        Sms
        (more...)
    [service]
        Base
        Mail
        Sms
        (more...)
    [validate]
        Base
        Mail
        Sms
        (more...)
    [controller]
        Admin
        Mail
        Sms
        (more...)

这样的设计会导致项目目录逐渐变得臃肿,是什么使项目僵化,项目经理为何一看到代码就头疼,规范的高内聚的包结构,虽然遵循业务了mvc的原则,但也只是相对来说清晰了一些。

mvc高于业务分层

application
[config]
    Common
[model]
    Base
        [mail]
            MailTemplate
            MailMessage
        [sms]
            SmsTemplate
            SmsMessage
[service]
    Base
    [mail]
        MailTemplate
        MailMessage
    [sms]
        SmsTemplate
        SmsMessage
[validate]
    Base
    [mail]
        MailTemplate
        MailMessage
    [sms]
        SmsTemplate
        SmsMessage
[controller]
    Admin
    [mail]
        MailTemplate
        MailMessage
    [sms]
        SmsTemplate
        SmsMessage

这会让人有一种将各个业务模块(如mail和sms)的service和controller隔离开了的感觉,当模块更多,每个模块的内容更多,这个“隔得很远”的不适感会逐渐侵蚀你的开发速度。

业务分层包含mvc

application
    [common]
        [config]
            Common
        [model]
            Base
            Mail
            Sms
            ...
        [service][非必须]
            Base
        [validate][非必须]
            Base
        [controller]
            Base
    [mail]
        [config]
            Mail
            Sms
        [service]
            Mail
            Sms
        [validate]
            Mail
            Sms
        [controller]
            Mail
            Sms
    [admin]
        ....

业务并不是特别复杂,但应该可以发现第三种(业务分层包含mvc)的结构,才是一种高内聚的结构。

原文来自:徐靖峰|个人博客 Re:从零开始的领域驱动设计

点我评论
打赏本文
二维码


30

文章

6

分类