聊一下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 的设计有了一点新的体会,记 ...
随机推荐
- 201871010118-唐敬博《面向对象程序设计(Java)》第四周学习总结
博文正文开头格式:(2分) 项目 内容 这个作业属于哪个课程 https://www.cnblogs.com/nwnu-daizh/ 这个作业的要求在哪里 https://www.cnblogs.co ...
- pip 安装包 使用国内镜像源
1.pipy国内镜像目前有: 阿里云 http://mirrors.aliyun.com/pypi/simple/ 中国科技大学 https://pypi.mirrors.ustc.edu.cn ...
- 网站调试时记得关闭火狐adblock插件
由于特殊需要,xmyanke需要在网站右侧添加一个弹窗,第一个网站加上代码后可以正常显示,第二个网站却怎么也看不到图片,同样的安装方法为什么差别那么大呢?重新复制代码还是不行,再试一遍,依然如此,wi ...
- ActiveMQ消息可靠性-持久性
三个方面保证消息的可靠性 1.消息的持久 2.事物 3.签收 一:PERSISTENT:持久性 参数说明:1.持久 2.非持久 Java里面设置持久化和非持久 持久: 将持久性设置为持久 宕机 ...
- 洛谷P3369 【模板】普通平衡树(FHQ Treap)
题面 传送门 题解 写了一下\(FHQ\ Treap\) //minamoto #include<bits/stdc++.h> #define R register #define inl ...
- JavaScript的深克隆与浅克隆
JS数据类型分为两类: 基本类型(Number.Boolean.Undefined.Null.String.Symbol(ES6新加,此处不讨论))与引用类型(Object).原始类型存储的是对象的实 ...
- CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]);
CanvasRenderingContext2D.fillText(text, x, y [, maxWidth]); [, maxWidth]的意思是,方括号代表可有可无,有fillText(tex ...
- mark-向量式编程
numpy的速度→→→numpy中的向量式编程 from numpy to python https://www.labri.fr/perso/nrougier/from-python-to-nump ...
- Apache tomcat高可用web集群搭建过程配置记录
说明,本文仅作为个人搭建配置保存,问题处理没有一一列出,过程也未见详尽,有问题的朋友可以直接留言给我,会一一回复,谢谢. 小目标: 支持故障转移(或主备,扩展性不佳),保证故障转移后,对前端用户透明, ...
- Unix/Linux小计
1. centos查看cpu信息 cat /proc/cpuinfo processor有几个就是有几个cpu,每一列是每个cpu的信息 每个processor中的cores是当前cpu中有几个核心. ...