领域驱动设计C# 2008实现问题.设计.解决方案
基本信息
内容简介回到顶部↑
书籍
计算机书籍
这是第一本也是唯一一本关于使用c#实现领域驱动设计的技术书籍,本书介绍了构建实际应用系统的全过程。本书的项目基于一个现有公司的实际系统,重点介绍了领域驱动设计和构建支持领域驱动设计的框架。
每一章都按照清晰的层次结构分成特定的模块,介绍了如何选择最佳的解决方案,然后采取相应的设计来解决问题。所有章节构建了一个完整的项目,在创建系统代码的过程中您可以学到重要的实践技能。
本书主要内容
◆何时、为什么以及如何使用领域驱动设计
◆如何设计和构建初始的领域模型
◆如何实现“持久化无关”
◆如何为领域模型构建仓储框架
◆将tdd应用到领域模型的技能
◆如何应用模型—视图—视图模型模式
◆如何构建客户端会员管理系统
◆如何将客户系统和服务器同步
本书读者对象
本书面向有经验的c#和.net开发人员,以进一步提升读者编写高性能和可扩展的应用程序的技能。
计算机书籍
这是第一本也是唯一一本关于使用c#实现领域驱动设计的技术书籍,本书介绍了构建实际应用系统的全过程。本书的项目基于一个现有公司的实际系统,重点介绍了领域驱动设计和构建支持领域驱动设计的框架。
每一章都按照清晰的层次结构分成特定的模块,介绍了如何选择最佳的解决方案,然后采取相应的设计来解决问题。所有章节构建了一个完整的项目,在创建系统代码的过程中您可以学到重要的实践技能。
本书主要内容
◆何时、为什么以及如何使用领域驱动设计
◆如何设计和构建初始的领域模型
◆如何实现“持久化无关”
◆如何为领域模型构建仓储框架
◆将tdd应用到领域模型的技能
◆如何应用模型—视图—视图模型模式
◆如何构建客户端会员管理系统
◆如何将客户系统和服务器同步
本书读者对象
本书面向有经验的c#和.net开发人员,以进一步提升读者编写高性能和可扩展的应用程序的技能。
作译者回到顶部↑
本书提供作译者介绍
Tim McCarthy是一名自由职业的咨询师,他采用最新的Microsoft平台和技术设计和构建分层的Web和智能客户系统。Tim是一个解决方案架构方面的Microsoft MVP,他精通各种各样的Microsoft技术,不仅局限于以下技术:.NET Framework(ASP.NET/智能客户NSTO/工作流/Web服务、Windows Presentation Foundation)、SQL Server、Active Directory、MS Exchange开发、UDDI、SharePoint和面向服务架构(SOA)应用。Tim不仅是一个项目技术主管/成员,而且在一些财富500强公司担任技术咨询。他几年前已经获得Microsoft.. << 查看详细
目录回到顶部↑
第1章 介绍项目:smartga系统
1.1 问题
1.2 设计
1.2.1 可靠性和可得性
1.2.2伸缩性
1.2.3 可维护性
1.2.4 富客户应用功能
1.2.5 离线可得
1.2.6 web访问
1.2.7 智能安装和自动更新功能
1.2.8 附加客户设备支持
1.3 解决方案
1.3.1 满足可靠性、可得性、伸缩性、离线可得和附加客户设备支持需求
1.3.2 满足可维护性需求
1.3.3 满足富客户应用功能需求
1.3.4 满足web访问需求
1.3.5 满足智能安装和自动更新功能需求
1.4 总结
第2章 设计分层架构
2.1 问题
1.1 问题
1.2 设计
1.2.1 可靠性和可得性
1.2.2伸缩性
1.2.3 可维护性
1.2.4 富客户应用功能
1.2.5 离线可得
1.2.6 web访问
1.2.7 智能安装和自动更新功能
1.2.8 附加客户设备支持
1.3 解决方案
1.3.1 满足可靠性、可得性、伸缩性、离线可得和附加客户设备支持需求
1.3.2 满足可维护性需求
1.3.3 满足富客户应用功能需求
1.3.4 满足web访问需求
1.3.5 满足智能安装和自动更新功能需求
1.4 总结
第2章 设计分层架构
2.1 问题
前言回到顶部↑
在阅读了Eric Evans的书Domain-Driven Design,Tackling Complexity in the Heart Of Software之后,我设计软件系统的方式完全改变了。之前,我常常以一种侧重于以数据为中心设计软件对象模型,我没有真正聚焦于如何把行为和数据结合到对象中。我对这种新的思考方式感到如此震惊,因此我开始试图找到能够揭示Eric书中概念的代码示例。我通常用Google搜索我的领域驱动设计(DDD)问题的答案,并且确实发现有些东西对我有帮助,但我依然渴求更多关于这个主题的知识。
我不得不搜索.NET中的DDD答案,因为Eric的书是与技术无关的。本书的要点是架构概念。里面到处有Java和Smalltalk的代码示例,但不是关于架构概念的。然后,就有了Jimmy Nilsson的书Applying Domain-Driven Design and Patterns,此时我开始看到可以用于连接DDD概念的更多模式。Jimmy把来自Martin Fowler的优秀书籍Patterns of Enterprise Application Architecture的一些概念结合起来,并说明它们如何有助于得到好的DDD设计原则。Jimmy也做了大量的工作,在他的书中提供了大量优秀的.NET代码示例,并引导读者体验了几种按照DDD实现操作的方法。就在我刚看完Jimmy的书后,我开始订阅Yahoo!Groups上的DDD RSS Group feed,这也给了我很多帮助。在DDD小组中,我发现的一件事情是人们一直在寻找一个能够揭示DDD原则的.NET相关应用。在阅读了这些帖子之后,我决定撰写这本书,把我懂得的关于如何使用DDD技术构建.NET应用的知识分享给开发人员社群。我猜我可能感觉有点内疚,因为我读了小组里如此多其他人的帖子,但我只是偶尔发帖。现在,我编写了一本书代替发帖!可能这将促使我更多地融入这个小组。
我写这本书的主要目的是吸取Eric、Martin和Jjmmy书中的思想和模式,构建一个真实的端到端.NET应用。我确实希望说明我如何使用DDD原则在.NET中构建一个领域模型的某些想法,但是,我并非只是构建老的.NET应用,我也要尝试一些Microsoft在构建应用方面的最新技术,如Visual Studio 2008和.NET3.5框架。
本书读者对象
本书针对希望精通面向对象的设计技巧和学习DDD的有经验的.NET开发人员。如果您不在这个级别,也是可以的,但我建议您至少有一些编写.NET代码或者Java代码的经验。如果您之前没有编写过任何.NET代码,则本书可能稍微有点难。
我也推荐您阅读之前提到的Eric Evans、Jimmy Nilsson和Martin Fowler的书籍。您不一定要读,但我强烈推荐阅读,因为这有助于您更好地理解本书的许多设计和模式。
因为本书的每一章都建立在前一章的基础上,所以我建议您按顺序阅读。
本书涉及范围
第1章,“介绍项目:SmartCA系统”——本章介绍了我正在构建的系统——SmartCA系统。本章不仅列出了遗留系统的问题和新系统的需求,而且说明了计划用来满足所有需求的技术和设计。
第2章, “设计分层架构”——本章涵盖了本书其余部分要使用的架构基础。本章介绍了一些模式,包括分层超类型模式、分离接口模式以及模型-视图-视图模型模式。我也标识和解释了几个重要的DDD概念。从本章我开始编写系统的代码,重点放在基础设施层。
第3章, “管理项目”——本章开始实现系统中管理项目的功能。本章也讨论了承包商的概念以及他们与项目之间的关系,并介绍了模型-视图—视图模型模式的第一个代码迭代。
第4章, “公司和联系人”——本章定义和建模了公司、联系人和项目联系人。本章也说明了如何保存不是它们自己的聚合根的实体,例如,在项目聚合内如何保存项目联系人。最后,本章介绍了在UI中显示和编辑值对象的技术。
第5章, “递交传送”——本章介绍了建筑行业中的递交传送的概念,然后使用该概念来建模递交聚合。我给领域层和基础设施层都添加了一个新概念,阐述了如何保存来自实体根仓储的子集合。本章也讨论了如何使用Xceed DataGrid控件来构建用户控件。
第6章, “信息请求”——本章介绍了建筑行业中信息请求(RFI)的概念。我也在领域中引入了一个新的模式,称为说明模式。本章也针对如何处理传送的仓储和视图模型进行了一些重要的重构。
第7章, “提案请求”——本章介绍了建筑行业中提案请求的概念。本章开始给领域模型添加更多的行为,并说明更丰富的领域模型类。本章也讨论了如何处理领域模型类内部违反的业务规则,并绑定说明功能。
第8章, “更改单”——本章介绍了建筑行业中更改单的概念。本章继续给领域模型类添加更多的行为,继续开发更丰富的领域模型类。本章介绍了两个重要的接口,IEntity接口和IAggrcgateRoot接口。这导致了遍及整个领域模型的大量好的重构。最后,本章创建了一些更加高级的说明类。
第9章, “施工更改指令”——本章介绍了建筑行业中施工更改指令的概念,并进行了大量重构,主要聚焦于各个视图模型类。本章说明了接口和泛型结合的功能。
第10章, “和服务器同步”——本章设计和实现了如何和服务器同步客户的离线数据。本章不仅介绍了如何在客户上存储事务消息,而且介绍了如何把这些客户上的消息和服务器上的消息同步。此外,还说明了如何确保在领域模型中实现所有的同步逻辑。
第11章, “客户会员管理系统”——本章创建了客户会员管理系统,从而说明了如何允许用户能够在一个离线场景中执行与会员管理相关的任务。这涉及一个非常丰富的领域模型,用来表示用户及其会员管理数据,以及使用提供者而不是仓储来和数据存储交互的新概念。本章也说明了如何利用第10章的同步代码。
本书结构
我不得不搜索.NET中的DDD答案,因为Eric的书是与技术无关的。本书的要点是架构概念。里面到处有Java和Smalltalk的代码示例,但不是关于架构概念的。然后,就有了Jimmy Nilsson的书Applying Domain-Driven Design and Patterns,此时我开始看到可以用于连接DDD概念的更多模式。Jimmy把来自Martin Fowler的优秀书籍Patterns of Enterprise Application Architecture的一些概念结合起来,并说明它们如何有助于得到好的DDD设计原则。Jimmy也做了大量的工作,在他的书中提供了大量优秀的.NET代码示例,并引导读者体验了几种按照DDD实现操作的方法。就在我刚看完Jimmy的书后,我开始订阅Yahoo!Groups上的DDD RSS Group feed,这也给了我很多帮助。在DDD小组中,我发现的一件事情是人们一直在寻找一个能够揭示DDD原则的.NET相关应用。在阅读了这些帖子之后,我决定撰写这本书,把我懂得的关于如何使用DDD技术构建.NET应用的知识分享给开发人员社群。我猜我可能感觉有点内疚,因为我读了小组里如此多其他人的帖子,但我只是偶尔发帖。现在,我编写了一本书代替发帖!可能这将促使我更多地融入这个小组。
我写这本书的主要目的是吸取Eric、Martin和Jjmmy书中的思想和模式,构建一个真实的端到端.NET应用。我确实希望说明我如何使用DDD原则在.NET中构建一个领域模型的某些想法,但是,我并非只是构建老的.NET应用,我也要尝试一些Microsoft在构建应用方面的最新技术,如Visual Studio 2008和.NET3.5框架。
本书读者对象
本书针对希望精通面向对象的设计技巧和学习DDD的有经验的.NET开发人员。如果您不在这个级别,也是可以的,但我建议您至少有一些编写.NET代码或者Java代码的经验。如果您之前没有编写过任何.NET代码,则本书可能稍微有点难。
我也推荐您阅读之前提到的Eric Evans、Jimmy Nilsson和Martin Fowler的书籍。您不一定要读,但我强烈推荐阅读,因为这有助于您更好地理解本书的许多设计和模式。
因为本书的每一章都建立在前一章的基础上,所以我建议您按顺序阅读。
本书涉及范围
第1章,“介绍项目:SmartCA系统”——本章介绍了我正在构建的系统——SmartCA系统。本章不仅列出了遗留系统的问题和新系统的需求,而且说明了计划用来满足所有需求的技术和设计。
第2章, “设计分层架构”——本章涵盖了本书其余部分要使用的架构基础。本章介绍了一些模式,包括分层超类型模式、分离接口模式以及模型-视图-视图模型模式。我也标识和解释了几个重要的DDD概念。从本章我开始编写系统的代码,重点放在基础设施层。
第3章, “管理项目”——本章开始实现系统中管理项目的功能。本章也讨论了承包商的概念以及他们与项目之间的关系,并介绍了模型-视图—视图模型模式的第一个代码迭代。
第4章, “公司和联系人”——本章定义和建模了公司、联系人和项目联系人。本章也说明了如何保存不是它们自己的聚合根的实体,例如,在项目聚合内如何保存项目联系人。最后,本章介绍了在UI中显示和编辑值对象的技术。
第5章, “递交传送”——本章介绍了建筑行业中的递交传送的概念,然后使用该概念来建模递交聚合。我给领域层和基础设施层都添加了一个新概念,阐述了如何保存来自实体根仓储的子集合。本章也讨论了如何使用Xceed DataGrid控件来构建用户控件。
第6章, “信息请求”——本章介绍了建筑行业中信息请求(RFI)的概念。我也在领域中引入了一个新的模式,称为说明模式。本章也针对如何处理传送的仓储和视图模型进行了一些重要的重构。
第7章, “提案请求”——本章介绍了建筑行业中提案请求的概念。本章开始给领域模型添加更多的行为,并说明更丰富的领域模型类。本章也讨论了如何处理领域模型类内部违反的业务规则,并绑定说明功能。
第8章, “更改单”——本章介绍了建筑行业中更改单的概念。本章继续给领域模型类添加更多的行为,继续开发更丰富的领域模型类。本章介绍了两个重要的接口,IEntity接口和IAggrcgateRoot接口。这导致了遍及整个领域模型的大量好的重构。最后,本章创建了一些更加高级的说明类。
第9章, “施工更改指令”——本章介绍了建筑行业中施工更改指令的概念,并进行了大量重构,主要聚焦于各个视图模型类。本章说明了接口和泛型结合的功能。
第10章, “和服务器同步”——本章设计和实现了如何和服务器同步客户的离线数据。本章不仅介绍了如何在客户上存储事务消息,而且介绍了如何把这些客户上的消息和服务器上的消息同步。此外,还说明了如何确保在领域模型中实现所有的同步逻辑。
第11章, “客户会员管理系统”——本章创建了客户会员管理系统,从而说明了如何允许用户能够在一个离线场景中执行与会员管理相关的任务。这涉及一个非常丰富的领域模型,用来表示用户及其会员管理数据,以及使用提供者而不是仓储来和数据存储交互的新概念。本章也说明了如何利用第10章的同步代码。
本书结构








点击看大图





加载中...
