`
wangyugod
  • 浏览: 19052 次
  • 性别: Icon_minigender_1
  • 来自: 成都
最近访客 更多访客>>
社区版块
存档分类
最新评论

domain-driven-design学习

    博客分类:
  • Java
阅读更多
Why DDD?
1. 业务领域是一个应用程序的核心,使用DDD,直接面对核心业务,可增强业务需求确认速度,可以尽快暴露业务上的缺陷、风险。
2. 使用OO对核心业务进行建模,增强可扩展性、可维护性。domain model是核心业务,由POJO实现,不依赖于任何框架、数据库,不管想使用WEB方式或是Swing,或者移植到任何平台,domain model都不需要改变。
3. 解除了业务领域代码与非业务领域代码(如UI代码或持久层代码)的耦合,产生如下好处:
    1)使代码修改、扩展更加轻松
    2)使代码自动化测试更加容易
    3)业务领域代码直接清晰的反映了业务需求

应用程序的分层
UI Layer --> Application Layer --> Domain Layer --> Infrastructure
UILayer就是用户接口,用户的直接操作界面,相当于Swing、Web页面;
Application Layer:应用层,服务器端的用于处理Application Logic的层次,也可以叫做Application Service,也可以说是一个domain model的facade。
Domain:包括几种类型的对象,后面有详细说明
Infrastructure:持久层或者其他网络应用层次


Domain model中的几个对象
1. Entity
    具有唯一标识ID的对象,任何一个Entity对象在整个业务流程中都是唯一的,即便两个Entity对象的所有属性都相同,但具备不同的标识符,都是属于不同对象。
2. Value Object
    不具备唯一标识的对象,通常被设计为Immutable;Entity和Value Object不能靠是不是被持久化来区分,value object也可能会被存储到数据库或文件系统中
3. Factory
    用于创建domain对象,对于对象创建流程复杂的业务对象,需要使用Factory进行创建,以对客户端隐藏业务细节。
4. Repository
    用于对domain对象进行添加、查找、删除等操作,一般都要与infrastructure进行交互,以接口方式定义。
5. Service
    Service是一个domain object functionality operation的集合,没有状态,只提供Operation。通常会跨多个domain object,作为domain object间相互调用的一个接口。这样的operation如果定义在domain object中,会在domain object间形成一个强耦合,不利于修改、扩展。service中的方法可以认为是一个use case的操作序列,通常以接口方式定义。

与以前的三层结构的service比较 presentation + service + persistence
以前三层中的service包含业务逻辑,也包含与持久层的耦合,service层很厚,将很多业务逻辑全都写在里面,这样的service复用性及可维护性不高,只是针对一个客户端(这里指表现层)调用给出一个接口,是基于客户端请求的,而客户端这些请求有些时候仅仅是为了界面显示的需要,如在页面上要显示两个列表以便用户查看,像这种需求并不能体现真正的业务逻辑,而且这样的service根本不能被重用。在Martin Fowler的企业模型中定义的service layer 的概念,应该是很薄的一层,提供了用于客户端调用的facade,里面只包含应用层的逻辑(如上述的列表显示要求),而不是业务逻辑。

分享到:
评论
2 楼 wangyugod 2009-01-02  
你说的这种情况确实存在,很多公司都不是很注重设计模式或者说是设计思想这些东西,但是公司不重视这些,不代表我们程序员本身不需要关注这些东西,程序员这个职业最重要的就是保持自己的思想能与业界发展同步。

而且作为一个技术人员迟早会有自己设计(或者说是构建)一个应用程序框架的机会,所以最重要是设计人员能够起一个好头,建立起一个扩展性、伸缩性、维护性强的架构,这样开发人员也会按照这个架构来走。如果设计人员都一直坚持使用JSP+JavaBean的话,那么这并不仅仅是公司的问题了。真正好的架构是会带来很多有益的方面的。

我没资格谈整个中国软件业是不是够强大,但是据我所知,我周围这个行业中的一些朋友还是很有想法的,并且都能在自己的公司中发挥出很大的作用
1 楼 pluto4596 2008-12-31  
LZ展示了阶段性学习DDD的成果

不过我在这里还是想说下,在当前的社会的软件环境下,真正在项目中会关心OO的还是不多,就更不用说DDD了

大部分软件公司还是把主要精力放在快速开发商,内部的类集合,面向过程的开发理念。你进入公司可能就会有这样的思想灌输给你。现在就JAVA方面,可能还有10%(可能是我高估了)的开发人员不愿接受框架,在他们的理念中JAVA WEB就是要jsp+javabean,不要讲什么设计模式了

我的同事还在说,我用jsp+javabean开发是最快的,而且简单。什么框架,分层,OO那些都只是把程序复杂化而已。而我讲的维护性,扩展性他们并不在意

啰啰嗦嗦说了这么多,我觉得理念的提高是必要的,现实的环境却是真是的。
很多公司还是把程序员当蓝领用的,维护量大?没关系,我人多点啊,设计的不好也没关系,靠量顶上,3个人做一个人的活还不行么,反正程序员也便宜啊。。。。
真正的中国软件强大之路貌似还远。

相关推荐

Global site tag (gtag.js) - Google Analytics