文章目录
跨越边界传输数据
物理层意味着需要跨越的物理边界,不管是进程边界还是机器边界。跨越边界是一个昂贵的操作。触及远程物理机器的代价比触及同一台机器的另一个进程的更高。一个可以参考的经验法则是跨越进程边界的调用比对应的进程内调用要慢100倍。
如果要通过网络传输才能到达端点的话就更慢了。
一个调用是如何通过网线跨越边界的?轻装传输?还是背负一切传输?选择最适合的方式跨越边界(逻辑的或物理的)传输数据是应用程序的业务部分要解决的另一个设计问题。
分层架构里的数据流
上图(跨越分层架构各层的数据流的示意图)展示了分层架构里的一个相对抽象的数据流。
- 数据从用户界面以InputModel的形式穿过应用程序层。
- 根据被请求的操作,应用程序层可能需要使用InputModel的内容创建领域实体(比如说,从提供的信息创建一个新的订单)。
- 在分层的领域模型系统里,持久化通常意味着把领域实体转换成物理数据模型(通常是关系型数据模型)。
- 在回来的路上,在请求查询时,从数据模型读到的内容首先会被转换成领域实体图,然后适配进视图模型给用户界面渲染。
这4种模型在逻辑上都是不同的,但有时候它们可能是重合的。领域模型可以直接持久化到基础设施层,在这种意义上,领域模型和数据模型通常是相同的。在ASP .NET MVC应用程序里,输入模型和视图模型在控制器操作的GET和POST实现里通常是重合的。在CRUD系统里,所有模型都可能重合,也就是只有一个一一一它将会是MVC模式里的“模型”。
早在20世纪80年代刚被设计出来时,MVC是一个应用程序模式,可以用来架构整个应用程序。那是一体化系统的年代,被端到端创建成单一事务脚本。多逻辑层和多物理层系统的出现改变了MVC的角色,但没有否定它的重要性。MVC仍是一个强大的模式,但单一模型的理念不再有效。MVC里的模型被定义为“在视图里使用的数据"。这意味着今天的MVC基本上是一个表现模式。
共享领域模型实体
在遵循领域模型模式的分层架构里,领域实体是最