DDM: 一个简洁的前端领域模型库

在上一篇文章《前后端分离之领域模型的思考》中,我们介绍了在前端开发中所遇到的一个问题。即:

一个模型多个上下文的问题

对于我们的几个不同业务情景下,我们只使用同一个后台API的情形。如下图所示:

在我们的Blog Model里,我们有AuthorTitleSlugContentData几个字段。

而在我们使用的时候,我们需要依据这个模型应用到不同的场景下:

  • 面向读者的Model,只有TagTitleAuthorDateContent五个字段。
  • 面向SEO时,只有TagTitleDate、基于ContentDescription四个字段。
  • 面向RSS时,则有TitleAuthorDateContentSlug五个字段。

如果我们使用的是同一个模型,那么我们就很难做到分离上下文。并且在三种不同的场景下,Blog Model的含义都是不一样的:

于是,我们就需要想办法去区分不同的模型——这在后台来说是一件很容易的事:

但是在前台谁想这样做?在这其中使用复杂的OO思想?

所以,我们有了DDM。

DDM

我也想不起来为什么是Domain Double Model,大概是Frontend算是一个Model,后台算是一个Model。反正这个库就是叫这个名字了。

对于前台来说,一种理想的方式就是直接Clone一个Blog对象,然后从中获取所需要的字段了。

在一些博客里,如我的Django驱动的博客,Tag是属于另外一个API,就需要另外ADD

对于一些复杂的例子,我们就需要一个简单的Handle函数,如:

突然发现这里少了一个例子是:把Content变成Description,然后减少字符。。。

就这么简单和任性。

GitHub: https://github.com/phodal/ddm

据说,当前的测试覆盖率是100%;

本文分享自微信公众号 - phodal(phodal-weixin)

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2016-06-21

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏大内老A

ASP.NET Web API路由系统:路由系统的几个核心类型

虽然ASP.NET Web API框架采用与ASP.NET MVC框架类似的管道式设计,但是ASP.NET Web API管道的核心部分(定义在程序集Syste...

339100
来自专栏大内老A

ASP.NET Web API标准的“管道式”设计

ASP.NET Web API的核心框架是一个消息处理管道,这个管道是一组HttpMessageHandler的有序组合。这是一个双工管道,请求消息从一端流入并...

21650
来自专栏大内老A

如何让ASP.NET Web API的Action方法在希望的Culture下执行

在今天编辑推荐的《Hello Web API系列教程——Web API与国际化》一文中,作者通过自定义的HttpMessageHandler的方式根据请求的Ac...

25180
来自专栏大内老A

ASP.NET Web API自身对CORS的支持: EnableCorsAttribute特性背后的故事

从编程的角度来讲,ASP.NET Web API针对CORS的实现仅仅涉及到HttpConfiguration的扩展方法EnableCors和EnableCor...

238100
来自专栏大内老A

ASP.NET Web API中的Controller

虽然通过Visual Studio向导在ASP.NET Web API项目中创建的 Controller类型默认派生与抽象类型ApiController,但是A...

212100
来自专栏大内老A

[CORS:跨域资源共享] 同源策略与JSONP

Web API普遍采用面向资源的REST架构,将浏览器最终执行上下文的JavaScript应用Web API消费者的重要组成部分。“同源策略”限制了JavaSc...

22790
来自专栏大内老A

[ASP.NET Web API]如何Host定义在独立程序集中的Controller

通过《ASP.NET Web API的Controller是如何被创建的?》的介绍我们知道默认ASP.NET Web API在Self Host寄宿模式下用于...

22580
来自专栏大内老A

总体介绍ASP.NET Web API下Controller的激活与释放流程

通过《ASP.NET Web API的Controller是如何被创建的?》我们已经对HttpController激活系统的核心对象有了深刻的了解,这些对象包括...

21870
来自专栏大内老A

[CORS:跨域资源共享] W3C的CORS Specification

随着Web开放的程度越来越高,通过浏览器跨域获取资源的需求已经变得非常普遍。在我看来,如果Web API不能针对浏览器提供跨域资源共享的能力,它甚至就不应该被称...

19780
来自专栏大内老A

ASP.NET Web API路由系统:Web Host下的URL路由

ASP.NET Web API提供了一个独立于执行环境的抽象化的HTTP请求处理管道,而ASP.NET Web API自身的路由系统也不依赖于ASP.NET路由...

26290

扫码关注云+社区

领取腾讯云代金券

年度创作总结 领取年终奖励