聊一下domain和entity
这段时间在负责海外事务,今天带着客户端走海外商店的支付流程。因为在国内接的大多数是渠道聚合的SDK,客户端就很少关注支付业务流程,只是按照以前的接的demo然后按照渠道提供的参数就直接上了。先po一张业务流程图,然后再把话题撤回来。

简单的画了一下流程图,从流程图中可以看到,服务端在整个支付流程上做了很多次远程调用。因为Store提供出来的API是基于OAuth2.0的,对于AccessToken进行了封装并根据它的有效期进行自动更新,进而有了今天的话题。
其实AccessToken这个数据容器是一个很小的东西,它里面的数据成员基本上就是Store返回的数据参数,但后续我又需要对它的过期时间进行监控。所以,AccessToken的对象会在远程调用的结果参数上再加createTime这个成员变量。很快就会有了以下这个包结构:

然后基于回调对FooAccessToken进行序列化操作。问题来了:这样就可以了吗?
我闻到了代码的坏味道:
1.FooAccessToken是不是需要承载领域模型这么重的职责?并且在桥接SDK的工程上,我们是基于贫血模型开发的,不需要对实体进行simulate,只需关注数据流向就好了。
2.基于回调对FooAccessToken进行序列化的操作直接将封装的AccessToken耦合到了传输层,这不利于后续的改动。
对代码文件在此提炼,进而有了以下的改动:

虽然看起来“多此一举”,但在代码层次和语义上更清晰和明了了。基于贫血模型,业务对象更倾向为数据载体,赋予对象行为反而不太合适。业务对象不应该直接跟传输对象耦合在一起,在传输层需要对外部进行隔离。
聊一下domain和entity的更多相关文章
- Domain Driven Design and Development In Practice--转载
原文地址:http://www.infoq.com/articles/ddd-in-practice Background Domain Driven Design (DDD) is about ma ...
- Entity Framework Tutorial Basics(7):DBContext
DBContext: As you have seen in the previous Create Entity Data Model section, EDM generates the Scho ...
- 数据上下文【 DnContext】【EF基础系列7】
DBContext: As you have seen in the previous Create Entity Data Model section, EDM generates the Scho ...
- 【转载】maven插件mybatis-generator自动生成 (1)
http://blog.csdn.net/itlqi/article/details/49534447 1.新建一个maven项目在pom.xml添加如下: <plugins> <p ...
- ASP.NET MVC 解析模板生成静态页一(RazorEngine)
简述 Razor是ASP.NET MVC 3中新加入的技术,以作为ASPX引擎的一个新的替代项.在早期的MVC版本中默认使用的是ASPX模板引擎,Razor在语法上的确不错,用起来非常方便,简洁的语法 ...
- Jetty使用教程(四:21-22)—Jetty开发指南
二十一.嵌入式开发 21.1 Jetty嵌入式开发HelloWorld 本章节将提供一些教程,通过Jetty API快速开发嵌入式代码 21.1.1 下载Jetty的jar包 Jetty目前已经把所有 ...
- 设计模式/原则篇- Unit of Work
概念 Unit of Work 即工作单元. 用来维护一组受业务影响的对象列表,将多个操作放在一个单元中,把操作原子化,通过事务统一完成一次提交,如果某个过程出现异常,就将所有修改进行回滚,保证数据的 ...
- 谁都能看懂的单点登录(SSO)实现方式(附源码)
SSO的基本概念 SSO英文全称Single Sign On(单点登录).SSO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同 ...
- DDD:小议 BoundexContext 设计
背景 看了这篇文章:Coding for Domain-Driven Design: Tips for Data-Focused Devs,对 BoundedContext 的设计有了一点新的体会,记 ...
随机推荐
- C#中的函数(二) 有参有返回值的函数
接上一篇 C#中的函数(-) 无参无返回值的函数 http://www.cnblogs.com/fzxiaoyi/p/8502613.html 这次研究下C#中的函数(二) 有参有返回值的函数 依然写 ...
- swagger 配置- ssm
swagger 配置 - ssm swagger 是一个用来看接口的工具,具体效果如下,这里用的是swagger2 1.porm.xml <dependency> <groupId& ...
- 第二阶段冲刺(个人)——four
今天的的计划:选择功能界面的背景设计,使得整体效果看上去吸引眼球. 昨天做了什么?选择功能界面的选择框排版设计. 遇到的困难: 还是js的函数 设计,思路不是很清晰.
- 2014-2015 ACM-ICPC, Asia Tokyo Regional Contest
2014-2015 ACM-ICPC, Asia Tokyo Regional Contest A B C D E F G H I J K O O O O O O A - Bit ...
- ELK原理
为什么要使用Elasticsearch? 因为在我们中的数据,会随着时间变的非常多,若采用以往的模糊查询,模糊查询前置通配符,如:"%aa%",会放弃索引,导致数据表查询将变成全 ...
- shell中echo输出换行的方法
[~]#echo "Hello world.\nHello sea" Hello world.\nHello sea [~]#echo -e "Hello world.\ ...
- windows 安装 numpy scipy matplotlib scikit-learn
直接使用 pip install 包名 的方法安装不成功 下载第三方安装包 下载地址:https://www.lfd.uci.edu/~gohlke/pythonlibs/#numpy 根据系统 ...
- Spring boot配置文件application.properties和bootstrap.properties的区别
spring boot 有两种配置文件 (1)application.properties(application.yml) 系统级别的一些参数配置,这些参数一般是不会变动的 (2)bootstrap ...
- Python【每日一问】19
问: [基础题]:请解释类方法.静态方法.属性方法[提高题]:有以下几个数字:1.2.3.4.5,能组成多少个互不相同且无重复数字的三位数?都是多少?(代码实现) 答: [基础题]:请解释类方法.静态 ...
- docker 学习操作记录 2
记录2 [BEGIN] // :: Connecting to ... Connection established. To escape to local shell, press Ctrl+Alt ...