摘要:在上篇中我们简单谈了下架构设计中服务层的简单理解,在这里我们将继续服务层的架构,在本节我们将重点在于分布式服务。在分布式系统中表现层和业务逻辑层 并不处于同一物理部署,所以我们必须存在分布式服务,以契约方式发布于网络中,我们的关注点在于服务,面向服务编程,这种通过组合业务逻辑暴露可用服务的架构叫做面向服务架构(SOA)。 SOA强调一个松耦合,基于宏服务的架构,通过契约暴露给服务消费者可用的服务交互。SOA是以服务为组成构建,原则有: 边界清晰: 服务层是消费者交互到系统业务的唯一入口,所有我们的服务必须能够被消费者所理解,以及最好处理Request/Response基于消... 阅读全文
架构设计中服务层的简单理解
2012-05-21 23:09 by 破狼, 22453 阅读, 7 推荐, 收藏, 编辑
摘要:在ddd设计中我们经常会提到服务层,服务层是什么?职责是什么?有什么好处?。 先看简单的层次图(注:这里并没有考虑其他多余的领域逻辑数据层存储,或者UOW这些细节) 我的理解是服务层是处于我的应用程序业务层和表现层之间的应用程序边界,边界可能是很薄的一层类设计或者是分布式服务网络跃点。它是一个与技术无关的名词。由表现层直接调用,契约,执行命令(修改状态(CUD))或者是查询返回dto(数据迁移对象)(cms,命令-查询分离)。他对业务逻辑层接口很清楚,组织业务逻辑 微服务形成宏服务,适配表现层。 这里谈到宏服务和微服务,宏服务有一些列粗粒度的服务组成。用户的一次操作usec... 阅读全文
一些软件设计的原则
2012-05-12 18:57 by 破狼, 12447 阅读, 4 推荐, 收藏, 编辑
摘要:以前本站向大家介绍过一些软件开发的原则,比如优质代码的十诫和Unix传奇(下篇)中所以说的UNIX的设计原则。相信大家从中能够从中学了解到一些设计原理方面的知识,正如我在《再谈“我是怎么招聘程序”》中所说的,一个好的程序员通常由其操作技能、知识水平,经验层力和能力四个方面组成。在这里想和大家说说设... 阅读全文
架构设计--逻辑层 vs 物理层
2012-05-09 22:50 by 破狼, 7822 阅读, 1 推荐, 收藏, 编辑
摘要:Layer 和Tier都是层,但是他们所表现的含义不同,Tier指的是软件系统中物理上的软件和硬件,具体指部署在某服务器上,而Layer(逻辑层)指软件系统中完成特定功能的逻辑模块,逻辑概念。 Layer是逻辑上 组织代码的形式。比如逻辑分层中表现层,服务层,业务层,领域层,他们是软件功能来划分的。并不指代部署在那台具体的服务器上或者,物理位置。 Tier这指代码运行部署的具体位置,是一个物理层次上的划为,Tier就是指逻辑层Layer具体的运行位置。所以逻辑层可以部署或者迁移在不同物理层,一个物理层可以部署运行多个逻辑层。 从Layer和Tier就会延伸到逻辑架构和物理架构。我... 阅读全文
面向设计原则理解
2012-05-08 00:47 by 破狼, 6051 阅读, 4 推荐, 收藏, 编辑
摘要:面向对象设计(OOD)核心原则让我的程序模块达到“高内聚低耦合”,这是来自于30年前兴起的结构化设计(structured Design),但是同样适用于我们的OOD。1.高内聚: 高内聚是指某个特定模块(程序,类型)都应完成一系列相关功能,描述了不同程序,类型中方法,方法中不同操作描述的逻辑之间... 阅读全文
Green.AgileMapper新增-Green.ObjectPickUper(do到dto对象的默认抽取)
2012-04-05 23:17 by 破狼, 1674 阅读, 4 推荐, 收藏, 编辑
摘要:Green.AgileMapper意在处理领域驱动开发中对象之间的Mapper(如果你还不了解Green.AgileMapper,从这里开始Green.AgileMapper开源项目的使用(1) 和Green.AgileMapper项目(2)-新增DO和DTO代码生成,项目地址:CodePlex http://agilemapper.codeplex.com/),本项目在后期会针对领域建模提供设计时候支持,利用EF和NHibernate作为底层ORM框架产生自己的领域框架,在设计时才会采用这些组件。 在我们的领域驱动开发中,DomainObject(领域对象)是一个自然oo对象,存在许多... 阅读全文
Green.AgileMapper项目(2)-新增DO和DTO代码生成
2012-03-31 20:57 by 破狼, 2042 阅读, 4 推荐, 收藏, 编辑
摘要:如果你还不了解Green.AgileMapper的用意,作用请先一步到上篇Green.AgileMapper开源项目的使用,如果你觉得运行时(Runtime)的Mapper效率存在问题,在这个版本中有了更新,新增了C#直接代码的生成,这里的生成都已3.0后的扩展方法实现,你可以很方便的一句代码实现两者的转化。 代码生成我本想利用T4模板,但是由于我们的项目IDE版本是VS2008,对于T4的参数传递支持还不是很友好,你可能说用AppDomain.SetData,或者CallContext.LogicalSetData,但是可惜我们的饿MappingRule是不可序列化的,所以最后我只得采用了. 阅读全文
Green.AgileMapper开源项目的使用(1)
2012-03-29 13:40 by 破狼, 2768 阅读, 7 推荐, 收藏, 编辑
摘要:在架构设计中,利用领域驱动开发时,涉及到do(领域对象)和dto(数据传输对象)的相互装换匹配,这段代码简单但是重复频率太多,写得我很冒火(我有个职责是wcf SOA包装),我是个不喜欢重复劳动的懒人,我在网上搜索等到很多实体匹配的框架EmitMapper,AutoMapper等,但是他们都不能满足dto和do的对象的按规则匹配包装。最后我只得花了半个小时写了一个简单的代码生成器,完成了我的任务。但是事后总觉得不爽,于是有了写下这个AgileMapper框架来适应领域开发中的po,do,dto,vo着一些列对象的相互包装,建立一个按规则包装的Mapper框架。项目已经完成上传于CodePle. 阅读全文
Attribute鲜为人知的两个特性记录
2012-03-28 00:33 by 破狼, 5041 阅读, 8 推荐, 收藏, 编辑
摘要:Attribute作为一种标记在我们的.net中随处可见,比如DatContract,DatMember,Serializable等等,各种用途的标记。是的我们的代码更加简洁,对于Attribute用好了,可以很好的简化我们的开发,比如PostSharp的AOP实现就是一种基于Attribute的标记编译时注入。在随笔中有关于IOC,AOP利用Attribute标记简化开发的实例。 在使用Attribute时候发现了些鲜为人知的特性: 1:利用GetCustomAttributes传入的Attribute返回得到包括派生类。 2:GetCustomAttributes每次返... 阅读全文
WinForm中实体类批量修改、批量提交辅助类
2012-03-27 11:47 by 破狼, 3387 阅读, 4 推荐, 收藏, 编辑
摘要:在WinForm项目开发中习惯于对于集合数据的批量修改,再一次性提交更新同步到数据库。这里我们就必须实现对对象的改变的跟踪记录,我们实现对象的改变跟踪有许多方式,大致我尝试了两种方式:1:对象强制实现接口,State守信和MakeMark行为。2:利用字典序继续改变。虽然1的方式是否更加合理,但是在winform中与BindingSource集合使用简化修增修改的书写,配合的不是很好,供给开发人员使用不是很爽。于是我修改成为第二种方式集合记录更改,在继续在原集合真实修改,触发BindingSource事件和与BindingSource很好的结合。 我们所要做的是对集合实体的变化做记录,这... 阅读全文